使用Python的readlines时忽略最后一个\n
我有一个文件,内容大概是这样的:
1 value1
2 value2
3 value3
这个文件的最后一行可能有一个换行符,也可能没有。
我现在用的代码运行得很好,但如果最后一行有换行符,它就会出错。
请问有什么好的方法来处理这个问题吗?
这是我用的代码,供参考:
r=open(sys.argv[1], 'r');
for line in r.readlines():
ref=line.split();
print ref[0], ref[1]
如果有换行符的话,就会出现这样的错误:
追踪记录(最近的调用在最前面):
文件 "./test",第 14 行,
print ref[0], ref[1]
索引错误:列表索引超出范围
2 个回答
2
我觉得你没有把事情的全部告诉我们。line.split()
的结果是一样的,不管最后一行是否以 \n
结束。
注意,文件的最后一行通常是以 \n
结束的,很多人有时候会觉得没有以 \n
结束的行很烦。
如果你做类似这样的事情:
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个。
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]