質問

次のようなファイルを読み取っています。

1   value1
2   value2
3   value3

ファイルの最終行の末尾に がある場合とない場合があります。

私が使用しているコードはうまく機能しますが、末尾に があると失敗します。
これを捕まえる最善の方法は何ですか?

参考までに私のコード:

r=open(sys.argv[1], 'r');
for line in r.readlines():
    ref=line.split();
    print ref[0], ref[1]

これは次のように失敗します。
トレースバック (最後の呼び出し):
ファイル「./test」の 14 行目
ref[0]、ref[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 ではなく、フィールドが 1 つだけある可能性も考慮してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top