2010-10-23 66 views
5

我有一个文件,我从读readlines方法时忽略最后\ n样子:使用Python处理

1 value1 
2 value2 
3 value3 

该文件可能有也可能没有在最后一行尾随\ n。

我使用的代码工作得很好,但是如果有尾随\ n它会失败。
什么是最好的方法来抓住这个?

我参考代码:

r=open(sys.argv[1], 'r'); 
for line in r.readlines(): 
    ref=line.split(); 
    print ref[0], ref[1] 

这将失败,并:
回溯(最近通话最后一个):
文件 “./test”,14号线在
打印REF [ 0],参考文献[1]
IndexError:列表索引超出范围

回答

7

可以忽略只包含空白行:

for line in r.readlines(): 
    line = line.rstrip()  # Remove trailing whitespace. 
    if line:     # Only process non-empty lines. 
     ref = line.split(); 
     print ref[0], ref[1] 
+1

rstrip是多余的;分裂忽略领先/训练空白 – 2010-10-24 01:18:09

2

我不认为你已经告诉了我们整个故事。 line.split()将给出相同的结果,而不管最后一行是否由\n终止。

请注意,由\n终止的文件中的最后一行是USUAL行为,并且人们偶尔会被没有如此终止的行打扰。

如果你做的是这样的:不是离开我们猜测

print repr(line), repr(ref) 

代替

print ref[0], ref[1] 

你将能够检测自己究竟是怎么回事。

如果为@马克Byers的猜测,你的最后一行是空的或只包含空格的,你可以忽略这个有些更加简单的代码行(和所有其他类似行):

for line in r: # readlines is passe 
    ref = line.split() # split() ignores trailing whitespace 
    if ref: 
     print ref[0], ref[1] 

请也考虑在最后一行中只有一个字段而不是0或2的可能性。

+0

我认为他的意思是还有另一行,最后只有'\ n',(以“... value3 \ n \ n”结尾) – Steven 2010-10-24 11:04:28