2015-09-15 3 views
3

У меня есть большой текстовый файл, и он составляет 2 ГБ или больше. Конечно, я не должен использовать read().Прочитайте большой текстовый файл, не сразу прочитав его в ОЗУ

Я думаю, что использование readline() возможно, это способ, но я не знаю, как остановить цикл в конце файла.

Я попытался это:

with open('test', 'r') as f: 
    while True: 
     try: 
      f.readline() 
     except: 
      break 

Но когда файл находится в конце концов, цикл не остановится, и будет держать печать пустой строки ('').

ответ

5

Конец файла определяется как пустая строка, возвращаемая readline. Обратите внимание, что фактическая пустая строка, как и каждая строка, возвращаемая readline, заканчивается разделителем строк.

with open('test', 'r') as f: 
    while True: 
     line = f.readline() 
     if line == "": 
      break 

Но опять же, файловый объект в python уже итерируется.

with open('test', 'r') as f: 
    for line in f: 
     print(line.strip()) 

strip удаляет пробелы, включая символ новой строки, так что вы не печатают двойные переводы строк.

И если вам не нравится это безопасно, и хотите наименьший код возможных:

for l in open("text"): print(l.strip()) 

EDIT: strip удаляет все виды непечатаемых с обеих сторон. Если вы на самом деле просто хотите избавиться от завершения новых строк, вы можете использовать rstrip("\n")

+0

Я не знал, что новые строки были добавлены в чтение строки. Благодаря! –

0

Вы можете просто использовать оператор for вместо инструкции while. Вы могли бы сделать что-то вроде

for line in f.readlines() 
    print(line) 

Может помочь.

+1

Я думаю, что это сразу прочитает файл и не сможет прочитать большой файл. –

+0

Ах, ты, наверное, прав. Мои извинения. –

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