3

ファイルを開いて、最後に読み取ったポイントから読み取ろうとしています。ファイルがかなり大きい (20 Mb から ~ 1 Gb) いくつかの調査を行った結果、tell() と seek() がこれを実行する最も効率的な方法の 1 つになるようです。次のコードを試しました

opened = open(filename, "rU")   
f1 = csv.reader(opened)
k = []
for line in f1:
    k.append(opened.tell())

これを行うと、リスト内のすべての値が 8272 ロングになります。それは、この実装を使用できないということですか? 足りないものはありますか?ご協力いただきありがとうございます!

Windows 7でpython 2.7を実行しています

アップデート

ここで学んだことをすべてつなぎ合わせて試行錯誤した後、次のコードを取得します

opened = open(filename, "rU")   
k = [0]
where = 1
for switch in opened:
    where += len(switch) + 1
    f = StringIO.StringIO(switch)
    interesting = csv.reader(f, delimiter=',')
    good_values = interesting.next()
    k.append(where)

return k

これにより、ユーザーはファイル内のどこに移動するかを正確に知ることができ、フォーマットに従ってファイルを解析することができます。オフセットを常に追加する必要がある理由が完全にはわかりません(len()で改行が正確に考慮されていないようです)。

4

1 に答える 1