我正在尝试确定在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
建议?
答案 0 :(得分:191)
lines = open(filename).read().splitlines()
答案 1 :(得分:22)
这是一个执行您所要求的生成器。在这种情况下,使用rstrip就足够了,并且比strip更快。
lines = (line.rstrip('\n') for line in open(filename))
但是,你很可能也想用它来摆脱尾随的空格。
lines = (line.rstrip() for line in open(filename))
答案 2 :(得分:9)
您如何看待这种方法?
with open(filename) as data:
datalines = (line.rstrip('\r\n') for line in data)
for line in datalines:
...do something awesome...
生成器表达式避免将整个文件加载到内存中,with
确保关闭文件
答案 3 :(得分:8)
for line in file('/tmp/foo'):
print line.strip('\n')
答案 4 :(得分:4)
只需使用生成器表达式:
blahblah = (l.rstrip() for l in open(filename))
for x in blahblah:
print x
另外,我想建议你不要在内存中读取整个文件 - 在大数据集上循环生成器会更有效。
答案 5 :(得分:3)
我用这个
def cleaned( aFile ):
for line in aFile:
yield line.strip()
然后我可以做这样的事情。
lines = list( cleaned( open("file","r") ) )
或者,我可以使用额外的函数扩展清理,例如,删除空白行或跳过注释行或其他任何内容。
答案 6 :(得分:2)
我会这样做:
f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l