6

我有一个从中读取的文件,如下所示:

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]

这将失败:
Traceback(最近一次调用最后一次):
文件“./test”,第 14 行,in
print ref[0],ref[1]
IndexError: list index out of range

4

2 回答 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]
于 2010-10-23T22:49:10.437 回答
2

我不认为你已经告诉我们整个故事。line.split()无论最后一行是否终止,都会给出相同的结果\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 的可能性。

于 2010-10-23T23:07:37.090 回答