2014-10-06 77 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