我有一个我从中读取的文件,如下所示:
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]
哪一个会因a而失败:
追溯(最近的呼叫最后):
文件“./test”,第14行,在
print ref [0],ref [1]
IndexError:列表索引超出范围
答案 0 :(得分:8)
您可以忽略仅包含空格的行:
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 :(得分:2)
我认为你没有告诉我们整个故事。无论最后一行是否被line.split()
终止, \n
都会给出相同的结果。
请注意,\n
终止的文件中的最后一行是USUAL行为,并且人们偶尔会受到未被终止的行所困扰。
如果您要做类似的事情:
print repr(line), repr(ref)
而不是
print ref[0], ref[1]
你将能够自己检测到发生了什么,而不是让我们猜测。
如果@Mark Byers推测,你的最后一行是空的或只包含空格,你可以通过这个更简单的代码忽略该行(和所有其他这样的行):
for line in r: # readlines is passe
ref = line.split() # split() ignores trailing whitespace
if ref:
print ref[0], ref[1]
还请考虑您最后一行中只有一个字段,而不是0或2的可能性。