2

重複の可能性:
file.tell()の不整合

ファイルの内容を検討する

D:\temp>od -c test.txt
0000000   x   x   x   x   x  \r  \n   y   y   y   y   y  \r  \n   z   z
0000020   z   z   z  \r  \n   t   t   t   t   t
0000032

このファイルとその後tell()の現在の位置を繰り返すと、間違った結果が返されるたびに(結果は最後に表示されます)

>>> with open("test.txt","r+") as fin:
    for line in fin:
        print fin.tell(), line.strip()


26 xxxxx
26 yyyyy
26 zzzzz
26 ttttt

しかし、ファイルを直線的に読み取ると、結果は期待と一致します

>>> with open("test.txt","r+") as fin:
    while True:
        line = fin.readline()
        if not line:
            break
        print fin.tell(), line.strip()


7 xxxxx
14 yyyyy
21 zzzzz
26 ttttt

ファイルを反復処理するときは、コンテンツ全体をバッファリングするか、少なくとも反復を開始する前に終了を超えて読み取るようです。

文書化された既知の動作ですか

4

0 に答える 0