1

Python 3組み込みのreadline() functionを使用して、txtファイルを1行ずつ読み取っています。このファイルには従業員情報がブロック単位で含まれており、次のようになっています。

名 ジャック \n
姓 ガルシア \n
マネージャー名 スミス \n
説明 これは従業員の説明です \n
bla bla bla bla \n
bla bla bla bla \n
bla bla bla bla. \n
給与 25000\n

私のコードは次のようになります。

with open(os.path.join(INPUT_FOLDER, filename)) as input_file:
    for line in input_file:
        if line.upper().startswith('DESCRIPTION'):
            description = line.split('DESCRIPTION')[1].strip()
            line = input_file.readline()
            while not line.upper().startswith('SALARY'):
                ...

description変数で期待値を取得しますが、input_file.readline()ステートメントが実行されると、さらに5行ジャンプします!! そのため、残りの説明を適切に完了することができません。私が腹を立てているのは、同じファイルで以前に他の従業員の情報ブロックを読んだことがあり、すべてが正しく機能していることです。

pydev 2.7.1を使用してEclipseでスクリプトを実行しています

誰かが同様の問題に対処していますか?IDEやpythonのバージョンとか関係あるのかな…?

前もって感謝します。

4

2 に答える 2

1

ファイル反復と readline() を混在させることはできません。file.next()の組み込み型のドキュメントには次のように書かれています。

「for ループをファイルの行をループする最も効率的な方法 (非常に一般的な操作) にするために、next() メソッドは非表示の先読みバッファを使用します。先読みバッファを使用した結果としてnext() を他のファイル メソッド (readline() など) と組み合わせても正しく動作しません。ただし、seek() を使用してファイルを絶対位置に再配置すると、先読みバッファがフラッシュされます。"

with open(os.path.join(INPUT_FOLDER, filename)) as input_file:
    while True:
        line = input_file.readline()
        if not line:
            break
        if line.upper().startswith('DESCRIPTION'):
            description = line.split('DESCRIPTION')[1].strip()
            line = input_file.readline()
            while not line.upper().startswith(SALARY):
于 2013-05-16T16:18:14.660 に答える
0

あなたは大文字で比較していますが、変更されていないケースで分割しています:

line.split('DESCRIPTION')

また、これ

line = input_file.readline()
while not line.upper().startswith(SALARY):

説明変数に追加されていないようです。

おそらく追加する必要があります

line = input_file.readline()
while not line.upper().startswith(SALARY):
    description += line
    line = input_file.readline()
于 2013-05-16T16:17:16.433 に答える