Как вы перебираете файлы в списке?

#python #loops #filepath

#питон #петли #путь к файлу

Вопрос:

У меня есть список путей к файлам, и я хочу просмотреть этот список, открывая каждый файл и извлекая из него определенные точки данных. Однако, когда я запускаю код, он не открывает файл, он просто берет n-й символ из пути к файлу и добавляет его в список целей вместо значения из нужного мне файла.

 for filename in file_list:  file_data = open(filename, 'r')  data_one.append(filename[5])  data_two.append(filename[6])  data_three.append(filename[7])  data_four.append(filename[8])  data_five.append(filename[9])  file_data.close()  

Что я пропустил, чтобы сделать так, чтобы он на самом деле не открывал файлы?

Комментарии:

1. Видеть filename[5] . Вы добавляете имя файла в свой список.

2. Вы можете распечатать filename и посмотреть, что это такое. А также распечатать file_data .

3. Вы сделали нарезку по имени файла, а не по содержимому файла

4. Содержимое, которое вы должны искать, будет из file_data. Допустим, если данные file_data разделены запятыми, то вы можете разделить строку разделителем и взять из нее n-е значение индекса.

5. Файл открыт; вы просто игнорируете его.


Ответ №1:

Предполагая, что ваш файл выглядит так:

 line0 line1 line2 line3 line4 line5 line6 line7 line8 line9  

и вы хотите прочитать строки от «line5» до «line9», это правильный код:

 for filename in file_list:  with open(filename, 'r') as f: # This line opens the file and will close it  data = f.readlines()  data_one.append(data[5]) # These lines use `data` and not the filename  data_two.append(data[6])  data_three.append(data[7])  data_four.append(data[8])  data_five.append(data[9])  

Ответ №2:

Вы хотите читать из объекта file_data , похожего на файл, а не из имени файла, чтобы обновить каждый список. Кроме того, файлоподобные объекты можно повторять, но они не могут быть проиндексированы. Если вам нужны строки 6-10, вам понадобится что-то вроде itertools.islice .

 from itertools import islice   for file_name in file_list:  with open(file_name) as f:  points = islice(f, 5, 10)  data_one.append(points[0])  data_two.append(points[1])  # etc  

Я, вероятно, делаю слишком много предположений о фактическом формате файла, но главное в том, что вы должны использовать файлоподобный объект, возвращаемый open вместо имени файла.