0

各行が5列で構成される巨大なサイズのファイルにインデックスを付けようとしています。最初の列がキーになり、ソートされます (17 個しかないとしましょう)。各キー値の開始位置を示す辞書を生成したいと考えています。だから私がすることは次のとおりです:

fmaps = open('file.txt','r')
pos = fmaps.tell()
ln = fmaps.readline()
chrDict = {ln.split()[0]:pos}



for ln in fmaps:

    if not chrDict.has_key(ln.split()[0]):
           pos = fmaps.tell() 
           chrDict[ln.split()[0]] = pos

ただし、ファイルを開こうとすると、

f = open('file.txt','r')
f.seek(val)
print f.readline()

最初の 0 バイト以外は完全に位置がずれていることがわかります。

forループの反復がファイル内の位置に対して何をするか知っている人はいますか?

4

2 に答える 2

0

file.tellドキュメントによると:

Windows では、Unix スタイルの行末を持つファイルを読み取るときtell()に、( の後に) 不正な値を返す可能性があります。この問題を回避するには、fgets()バイナリ モード ( ) を使用します。'rb'

'r'モードを に置き換えます'rb'

于 2013-10-21T15:13:26.220 に答える