在换行符处与`TextIOBase.tell()` 的偏移量不可能大

问题描述

我有一个包含换行符的文本文件。在任何换行符的位置以文本模式打开,.tell() 返回一个非常大的数字。否则 .tell() 行为正常。换行符处的偏移量“不可能很大”,因为尽管它是一个“不透明数字”,但 seek() 到该位置的操作失败并显示 OverflowError: cannot fit 'int' into an index-sized integer

以二进制模式读取行为完全正常,这仅发生在某些文件中。此外,寻求“隐含”偏移量(例如第 29 行或第 30 行,请参见下面的输出)表现正常。对正在发生的事情有任何见解吗?

代码
# File content omitted due to NDA
with open(FILE,'r') as fh:
    print(f"ENCODING: {fh.encoding}")
    while char := fh.read(1):
        print(fh.tell(),':',char=='\n')
print('EOF')
输出
ENCODING: UTF-8
1 : False
2 : False
3 : False
...
27 : False
28 : False
18446744073709551646 : True
340282367000166625996085689099021713438 : True
31 : False
32 : False
...
118 : False
119 : False
340282367000166625996085689099021713528 : True
121 : False
122 : False
...
180 : False
181 : False
340282367000166625996085689099021713590 : True
183 : False
184 : False
...
2012 : False
2013 : False
18446744073709553631 : False
1461501637671185285124623296198104371161410308063 : True
EOF
蟒蛇版本:
3.8.6 (default,Nov 18 2020,21:37:10) 
[GCC 10.2.0]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)