在Python中阅读换行符分隔文件并丢弃换行符的最佳方法?
我正试图确定在Python中使用换行符分隔的文件读取时摆脱换行符的最佳方式。
我想到的是以下代码,包括一次性代码来testing。
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
build议?
lines = open(filename).read().splitlines()
这是一个发电机,做你所要求的。 在这种情况下,使用rstrip就足够了,比strip还快一点。
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...
生成器expression式避免了将整个文件加载到内存中, with
确保closures文件
只需使用生成器expression式
blahblah = (l.rstrip() for l in open(filename)) for x in blahblah: print x
此外,我想build议你不要在内存中读取整个文件 – 循环发生器在大数据集上效率要高得多。
我用这个
def cleaned( aFile ): for line in aFile: yield line.strip()
然后我可以做这样的事情。
lines = list( cleaned( open("file","r") ) )
或者,我可以用额外的function扩展清理,例如,删除空白行或跳过注释行或其他。
我会这样做:
f = open('test.txt') l = [l for l in f.readlines() if l.strip()] f.close() print l