在python中使用readlines时忽略最后一个\n

在python中使用readlines时忽略最后一个\n,python,readlines,Python,Readlines,我有一个从中读取的文件,看起来像: 1 value1 2 value2 3 value3 文件的最后一行可能有尾随符,\n也可能没有尾随符 我正在使用的代码工作得很好,但如果有尾随,则会失败。 抓住这个最好的方法是什么 我的参考代码: r=open(sys.argv[1], 'r'); for line in r.readlines(): ref=line.split(); print ref[0], ref[1] 如果出现以下情况,则会失败: 回溯(最近一次呼叫

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

1   value1
2   value2
3   value3
文件的最后一行可能有尾随符,\n也可能没有尾随符

我正在使用的代码工作得很好,但如果有尾随,则会失败。
抓住这个最好的方法是什么

我的参考代码:

r=open(sys.argv[1], 'r');
for line in r.readlines():
    ref=line.split();
    print ref[0], ref[1]
如果出现以下情况,则会失败:
回溯(最近一次呼叫最后一次):
文件“/test”,第14行,在
打印参考[0],参考[1]

索引器错误:列表索引超出范围

您可以忽略仅包含空格的行:

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]
你将能够自己发现到底发生了什么,而不是让我们去猜测

如果@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个字段的可能性。< /强>

rA带是多余的;split忽略了引导/训练空格我想他的意思是,在结尾还有另一行,只包含
\n
。。。(文件以“…value3\n\n”结尾)