忽略最后\ n使用Python处理readlines方法时
题
我有我从看起来像读取一个文件:
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:列表索引超出范围
解决方案
可以忽略只包含空白行:
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]
其他提示
我不认为你已经告诉我们整个故事。的 line.split()
将无关的最后一行是否由\n
或不封端,得到相同的结果。强>
请注意,在文件的最后一行被\n
终止是平时的行为,人们被这并非如此终止的线偶尔困扰。
如果你是做这样的事情:
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,在你上线的可能性。
不隶属于 StackOverflow