Python: linecache.getline не работает должным образом

У меня есть каталог с многочисленными подкаталогами.

В нижней части каталогов есть несколько файлов .txt, из которых мне нужно извлечь строку 2.

import os
import os.path
import linecache

for dirpath, dirnames, filenames in os.walk("."):
    for filename in [f for f in filenames if f.endswith(".txt")]:
        #print os.path.join(dirpath, filename)
        #print filename
        print linecache.getline(filename, 2)

Я могу успешно разобрать все каталоги и найти каждый текстовый файл. А вот linecache.getline просто возвращает новую строку (где должны быть данные из той строки файлов). С использованием

print linecache.getline(filename, 2).rstrip('\n') 

Это тоже не решает.

Я могу правильно распечатать только имена файлов в каждом каталоге, но передача их в линейный кеш, похоже, может быть проблемой. Я могу успешно использовать linecache.getline(file, lineno.), если просто запускаю скрипт в 1 файле .txt в текущем каталоге.


person cc6g11    schedule 28.02.2017    source источник


Ответы (1)


linecache.getline берет имя файла из текущего рабочего каталога.

Решение таково:

import os
import os.path
import linecache

for dirpath, dirnames, filenames in os.walk("."):
    for filename in [f for f in filenames if f.endswith(".txt")]:
        direc = os.path.join(dirpath, filename)
        print linecache.getline(direc, 2)
person cc6g11    schedule 28.02.2017