86

我正在尝试确定在 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
4

7 回答 7

199
lines = open(filename).read().splitlines()
于 2009-02-13T06:35:50.797 回答
24

这是一个可以满足您要求的生成器。在这种情况下,使用 rstrip 就足够了,并且比 strip 稍快。

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

但是,您很可能也希望使用它来消除尾随空格。

lines = (line.rstrip() for line in open(filename))
于 2009-02-13T08:35:46.047 回答
11

您如何看待这种方法?

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

生成器表达式避免将整个文件加载到内存中并with确保关闭文件

于 2011-08-08T07:26:31.353 回答
8
for line in file('/tmp/foo'):
    print line.strip('\n')
于 2009-02-13T06:36:08.847 回答
4

只需使用生成器表达式:

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

另外,我想建议您不要在内存中读取整个文件——循环生成器在大数据集上效率更高。

于 2009-02-14T07:43:58.020 回答
3

我用这个

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

然后我可以做这样的事情。

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

或者,我可以使用额外的功能扩展清理,例如,删除空白行或跳过注释行或其他任何内容。

于 2009-02-13T11:07:27.710 回答
2

我会这样做:

f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l
于 2009-02-13T06:43:59.983 回答