tell()
GBK でエンコードされた私のファイルの読み取り中に呼び出すと、次の呼び出しreadline()
でUnicodeDecodeError
. ただし、 を呼び出さないとtell()
、このエラーは発生しません。
C:\tmp>hexdump badtell.txt
000000: 61 20 6B 0D 0A D2 BB B0-E3 a k......
C:\tmp>test.py と入力
with open(r'c:\tmp\badtell.txt', "r", encoding='gbk') as f:
while True:
pos = f.tell()
line = f.readline();
if not line: break
print(line)
C:\tmp>python test.py
a k
Traceback (most recent call last):
File "test.py", line 4, in <module>
line = f.readline();
UnicodeDecodeError: 'gbk' codec can't decode byte 0xd2 in position 0: incomplete multibyte sequence
ステートメントを削除すると、f.tell()
正常にデコードされました。なんで?Win7/Win10 で Python3.4/3.5 x64 を試してみましたが、すべて同じです。
誰か、何か考えはありますか?バグを報告する必要がありますか?
大きなテキスト ファイルがあり、この大きなテキストのファイル位置範囲を取得したいのですが、回避策はありますか?