簡體   English   中英

使用python的readlines時忽略last \\ n

[英]Ignore last \n when using readlines with python

我有一個我從中讀取的文件,如下所示:

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:列表索引超出范圍

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

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]

我不認為你告訴我們整個故事。 無論最后一行是否以\\n終止, line.split()都會給出相同的結果。

請注意, \\n終止的文件中的最后一行是USUAL行為,並且人們偶爾會被未被終止的行打擾。

如果你做的事情如下:

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的可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM