2014-01-21 1 views
0

Я новичок в Python - только использованный PERL раньше. У меня проблема с текстовыми файлами. Я открываю файл и попытаться перебирать строки, но представляется, что Python видит файл не в виде списка строк (строки), но в виде списка символов (отдельные буквы):Текст файл рассматривается как список символов, а не список str

def open_dat_xml(file_name): 

    file_handle = open(file_name) 

    file_content = file_handle.read() 

    file_handle.close() 

    return file_content 

list_of_lines = open_dat_xml('F003603_short.dat.xml') 

for i in list_of_lines: 
    print i 

Файл Я открытие - это XML, но я видел такое же поведение с текстовыми файлами.

Как заставить Python видеть файл в виде списка строк?

+2

Я просто хочу отметить, что проблема вызвана тем, что 'file_handle.read()' возвращает все содержимое файла в виде строки. Таким образом, ваша переменная 'list_of_lines' является строкой, а не списком вообще. Итерация по строке итерации над ее символами. – RemcoGerlich

+0

В качестве примечания в Python символы - это только строки длиной 1, а строки - это последовательности символов, поэтому ... вы на самом деле уже имеете последовательность строк, а не тот, который вы хотите. (РЕДАКТОР: @RemcoGerlich только что сказал большую часть этого за 1 секунду до меня ... но все же есть дополнительная информация здесь, я думаю.) – abarnert

ответ

1

Использование file_content = file_handle.readlines() isntead of .read().

Кроме того, попробуйте использовать менеджер контекста вместо open/close:

def open_dat_xml(file_name): 
    with open(file_name) as file_handle: 
     file_content = file_handle.read() 
    return file_content 

или еще короче:

def open_dat_xml(file_name): 
    with open(file_name) as file_handle: 
     return file_handle.read() 
+0

Спасибо! Это сработало! – user3208657

1
def open_dat_xml(file_name): 
    # The with statement closes the file as well 
    with open(file_name) as f: 
     return f.readlines() 
3

Файл является уже итератора линий. Просто используйте его в качестве такового:

with open(filename) as f: 
    for line in f: 
     do_stuff(line) 

Не называйте readlines(). Действительно, there's no reason to ever do so.

Если вам нужно повторять строки несколько раз, держать их вокруг после закрытия файла и т. Д., Проще и понятнее делать то же самое, что и в любое другое время, когда вам нужен список из некоторого, возможно, а-список-итерации и вызвать list:

with open(filename) as f: 
    return list(f) 

Но, как правило, вам не нужно ничего из этого, так что просто использовать файл непосредственно.

 Смежные вопросы

  • Нет связанных вопросов^_^