2015-01-21 2 views
-2

Я хочу открыть файл из каталога с генератором python - это csv-файл, а в каталоге около 8 csv-файлов. Да, я знаю, я также мог бы использовать csv-lib, но мне интересно, могу ли я сделать это без lib.Открыть файл с генератором - Python

Вот мой код до сих пор:

vz = glob.glob("home/user/*csv") 

data = [ open(i, 'r') for i in vz if "some_file_name" in i ] 

После того, что я получаю:

print data 

==> [<open file '/home/user/some_file_name.csv', mode 'r' at 0x1eb78a0>] 

for i in data.readlines(): 
    print i 

==> 'list' object has no attribute 'readlines' 

Любые идеи?

+0

Есть ли причина, по которой вы используете 'glob', чтобы найти свой файл, а не называть его напрямую? Почему бы не просто «открыть» («home/user/some_file_name.csv», «r») '? Кроме того, редко возникает необходимость вызывать 'readlines' в файле, так как они уже итерабельны. Просто зациклируйте на объект файла напрямую. – Blckknght

+0

Есть причина: я использую 'argv' для запуска скрипта с двумя аргументами. С помощью этих аргументов я ищу нужные файлы. Это что-то вроде 'python script.py arg1 arg2', а файл I searchin for имеет имя' filename_arg1_arg2', поэтому я делаю 'if 'filename_% s_% s"% (arg1, arg2) в vz: ... ' .. – jwi

+0

Вы ожидаете получить больше одного матча, когда-либо? Или вам нужно поддерживать неточные соответствия (например, с дополнительными символами)? Если вы действительно ищете только один файл с именем '" filename_arg1_arg2.csv "(где' arg1' и 'arg2' - ваши аргументы командной строки), просто используйте' open ("filename _ {} _ {}. Csv" .format (arg1, arg2)) 'или аналогичный код'% s', который вы уже используете в своем тесте. Не нужно глотать и перебирать все CSV-файлы, если вы знаете все имя. Работа с одним файлом, вероятно, устранит проблему, с которой вы столкнулись (что, вероятно, правильно описан ниже). – Blckknght

ответ

2

Кажется, что data - это список с одним элементом, который является файлом, который вы пытаетесь прочитать. Это должно сработать:

for i in data[0].readlines(): 
    print i 
Смежные вопросы