我有我从看起来像读取一个文件:

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,在你上线的可能性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top