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]

これは次の場合に失敗します:
トレースバック(最後の最後の呼び出し):
ファイル "./test"、14行目、
print ref [0]、ref [1]
IndexError:リストインデックスが範囲外です

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ではなく、フィールドが1つしかない可能性も考慮してください。

于 2010-10-23T23:07:37.090 に答える