Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取以换行符分隔的文件并丢弃换行符的最佳方法?_Python_File_Readline - Fatal编程技术网

Python 读取以换行符分隔的文件并丢弃换行符的最佳方法?

Python 读取以换行符分隔的文件并丢弃换行符的最佳方法?,python,file,readline,Python,File,Readline,我试图确定在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 resu

我试图确定在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()
f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l

这是一台发电机,它能满足你的要求。在这种情况下,使用rstrip就足够了,并且比strip快一点

lines = (line.rstrip('\n') for line in open(filename))
但是,您很可能也希望使用它来消除尾随空格

lines = (line.rstrip() for line in open(filename))
我用这个

def cleaned( aFile ):
    for line in aFile:
        yield line.strip()
然后我可以做这样的事情

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

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

只需使用生成器表达式:

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

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

您对这种方法有何看法

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

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

使用拆分(“/n”)如何?相同:我认为最好也关闭文件这个答案符合我的要求,我确信我需要添加一些错误检查等,但是对于这个特定的需要,它非常好。谢谢大家提供答案!我喜欢这样,但是如果不保存文件句柄,如何关闭文件?或者它是自动关闭的?使用CPython,一旦不再使用,文件对象的引用计数将变为零,文件将自动关闭。对于纯GC的实现,如Jython和IronPython,在GC运行之前文件可能不会关闭——因此这种简洁的变化可能不是最优的。在具有8GB RAM的Mac OS X 10.7.5上,我可以读取高达2047MB的文件(我的定义:1MB=1024 X 1024字节)。2048MB将引发MemoryError异常。@WKPlus是一个很好的问题——答案是“这取决于”(由于引用计数降至零,CPython将关闭它,但其他Python实现可能不会关闭它,因此最好将其显式化),而Curt Hagenlocher的回答在技术上更好,如果您需要在每行中添加其他处理,这个答案是一个很好的起点。不确定它是否用于过滤空行,但这比
更简洁。。。如果l.strip()不是“”
,这正是我的情况所需要的。它不应该是围绕RHS的[],不是()?@andrewb Using()给出了一个生成器表达式,它使用的内存不如使用[](列表理解)。这与@Timolina几年前发布的内容基本相同。。。
with open(filename) as data:
    datalines = (line.rstrip('\r\n') for line in data)
    for line in datalines:
        ...do something awesome...