Ответ 1
lines = open(filename).read().splitlines()
Я пытаюсь определить лучший способ справиться с избавлением от новых строк при чтении в файлах с разделителями новой строки в Python.
То, что я придумал, - это следующий код, включающий код throwaway для тестирования.
import os
def getfile(filename,results):
f = open(filename)
filecontents = f.readlines()
for line in filecontents:
foo = line.strip('\n')
results.append(foo)
return results
blahblah = []
getfile('/tmp/foo',blahblah)
for x in blahblah:
print x
Предложения?
lines = open(filename).read().splitlines()
Здесь генератор выполняет то, что вы просили. В этом случае использование rstrip достаточно и немного быстрее полосы.
lines = (line.rstrip('\n') for line in open(filename))
Однако вы, скорее всего, захотите использовать это, чтобы избавиться от отстающих пробелов.
lines = (line.rstrip() for line in open(filename))
for line in file('/tmp/foo'):
print line.strip('\n')
Что вы думаете об этом подходе?
with open(filename) as data:
datalines = (line.rstrip('\r\n') for line in data)
for line in datalines:
...do something awesome...
Выражение генератора позволяет избежать загрузки всего файла в память, а with
обеспечивает закрытие файла
Просто используйте выражения генератора:
blahblah = (l.rstrip() for l in open(filename))
for x in blahblah:
print x
Также я хочу посоветовать вам не читать весь файл в памяти - цикл с генераторами намного эффективнее на больших наборах данных.
Я использую этот
def cleaned( aFile ):
for line in aFile:
yield line.strip()
Тогда я могу делать такие вещи.
lines = list( cleaned( open("file","r") ) )
Или, я могу продлить очистку с помощью дополнительных функций, например, сбросить пустые строки или пропустить строки комментариев или что-то еще.
Я бы сделал это вот так:
f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l