Pythonで改行で区切られたファイルを読み込むときに、改行を削除する最適な方法を決定しようとしています。
私が思いついたのは、テストするための使い捨てのコードを含む次のコードです。
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の使用で十分であり、stripよりわずかに高速です。
lines = (line.rstrip('\n') for line in open(filename))
ただし、ほとんどの場合、これを使用して末尾の空白も削除する必要があります。
lines = (line.rstrip() for line in open(filename))
このアプローチについてどう思いますか?
with open(filename) as data:
datalines = (line.rstrip('\r\n') for line in data)
for line in datalines:
...do something awesome...
ジェネレーター式はファイル全体をメモリにロードすることを避け、with
はファイルを閉じることを保証します
for line in file('/tmp/foo'):
print line.strip('\n')
ジェネレータ式を使用するだけです:
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") ) )
または、たとえば空白行を削除したり、コメント行をスキップしたりするなど、追加の機能を使用してcleanを拡張できます。
私はこのようにします:
f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l