2009-02-13 99 views
74

我正試圖確定在Python中使用換行符分隔文件讀取時擺脫換行符的最佳方式。用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

有關使用分割(「/ n」個)什麼? – jle 2009-02-13 06:40:46

+1

相同:http://stackoverflow.com/questions/339537/end-line-characters-from-lines-read-from-text-file-using-python – 2009-02-13 08:38:35

+0

我認爲這將是更好的關閉文件以及 – 2011-08-08 07:25:31

回答

179
lines = open(filename).read().splitlines() 
+0

這個答案確實是我要做的,我確定我需要添加一些錯誤檢查等,但是對於這個特定的需求,這很好。謝謝大家提供的答案! – solarce 2009-02-13 06:48:45

+0

我喜歡這個,但如果你不保存文件句柄,你如何關閉文件?還是會自動關閉? – 2012-05-12 14:22:38

8
for line in file('/tmp/foo'): 
    print line.strip('\n') 
2

我會做這樣的:

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

這裏有一臺發電機,做你的要求是什麼。在這種情況下,使用rstrip就足夠了,並且比strip更快一些。

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

但是,你最有可能想用它來擺脫尾隨的空白。

lines = (line.rstrip() for line in open(filename)) 
3

我用這個

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

然後,我可以做這樣的事情。或者,我可以用額外的功能擴展清理,例如,刪除空白行或跳過註釋行或任何其他功能。

4

只需使用生成器表達式:

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

此外,我要奉勸你對內存讀取整個文件 - 上循環發電機是非常大的數據集更有效。

8

您對這種方法有什麼看法?

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

發生器表達避免加載整個文件到內存中並with確保關閉文件

相關問題