web-dev-qa-db-ja.com

改行区切りファイルを読み取り、改行を破棄する最良の方法は?

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

提案?

82
solarce
lines = open(filename).read().splitlines()
190

これは、あなたが要求したことを行うジェネレーターです。この場合、rstripの使用で十分であり、stripよりわずかに高速です。

lines = (line.rstrip('\n') for line in open(filename))

ただし、ほとんどの場合、これを使用して末尾の空白も削除する必要があります。

lines = (line.rstrip() for line in open(filename))
23
TimoLinna

このアプローチについてどう思いますか?

with open(filename) as data:
    datalines = (line.rstrip('\r\n') for line in data)
    for line in datalines:
        ...do something awesome...

ジェネレーター式はファイル全体をメモリにロードすることを避け、withはファイルを閉じることを保証します

9
Paweł Prażak
for line in file('/tmp/foo'):
    print line.strip('\n')
8
David Z

ジェネレータ式を使用するだけです:

blahblah = (l.rstrip() for l in open(filename))
for x in blahblah:
    print x

また、メモリ内のファイル全体を読み取ることをお勧めします-ジェネレーターのループは、大きなデータセットでははるかに効率的です。

4
artyom

これを使う

def cleaned( aFile ):
    for line in aFile:
        yield line.strip()

その後、私はこのようなことをすることができます。

lines = list( cleaned( open("file","r") ) )

または、たとえば空白行を削除したり、コメント行をスキップしたりするなど、追加の機能を使用してcleanを拡張できます。

3
S.Lott

私はこのようにします:

f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l
2
routerguy