2014-10-06 108 views
-1

通過CorePytho工作 我可以使用下面的代碼打印一個文件w/eachLine, 如果我刪除逗號它是雙倍間隔。閱讀文件條空白

我想使用逗號去掉空白的w/o - 沒有找到一個答案,爲什麼下面的代碼只打印最後一行.txt而不是前面的行。

#! /usr/bin/env python 

'readTextFile.py == read and display a text file' 

#get the filename 
fname = raw_input('Enter the filename: ') 
print 

#attempt to open the file for reading 
try: 
    fobj = open(fname, 'r') 
except IOError, e: 
    print "*** file open error:", e 
else: 
    #display contents to the screen 
    for eachLine in fobj: 
     x = [fname.rstrip('\n') for eachLine in fobj] 
     print eachLine, 
    fobj.close() 

回答

1

您循環您的閱讀循環裏面的文件。 Python文件對象具有「讀取位置」;每次迭代讀取位置移動到下一行的文件對象時。

因此在for eachLine in fobj循環中,您正在迭代fobj再次與列表理解。

實際上,你正在閱讀只是第一行,然後在x存儲文件(沒有換行符)的其餘。在Python 2中,變量重複使用在列表理解循環中是外部for循環中使用的相同變量,所以最終它仍然綁定到文件的最後一行。 (在Python 3中,列表解析有自己的範圍,所以列表理解中的eachLine變量是分開的,就像另一個函數中的局部變量)。

如果你想剝去當前行換行而已,那麼這樣做:

eachLine = eachLine.rstrip('\n') 

,並保留文件的其餘部分在for循環的後續迭代進行處理。

+0

它正在打印文件中的最後一行文本。所以它一定是在讀它?或者我完全不在。 – scopa 2014-10-06 14:43:42

+0

@ScottParkis:啊,Python 2;列表理解中的'eachLine'變量泄漏並且被綁定到最後一行。 – 2014-10-06 14:45:15

+0

謝謝 - 我對Python的瞭解很少,每次遇到困難時,答案都比我想象的要簡單。 – scopa 2014-10-06 14:48:24