python 文件读取 "int too large to convert to c long"

python file read "int too large to convert to c long"

在我的(大概是 64 位 Windows、64 位 2.7 python)安装中,文件读取功能使用 4 字节 c_long(长符号)。 我测试了基本 python 文件读取功能,但我无法传入超过最大带符号长整数值 (2,147,483,647) 的偏移量。不确定这是否是由于我的 python 安装问题,或者这是否真的是从 python...

中读取文件的最大限制

我的测试代码如下:

import sys
import platform

inFileName = r'C:\Projects\Tampa\LASPY_EVLR\LAS_DATA\input\Large_LAS505.las'
bit32_offset_signedlong = 2147483647

print("python version: " + sys.version)
print("platform: " + str(platform.architecture()))
print("------------------------------")

fileref = open(inFileName, "r")

print("starting 32bit max read")
datpart_32bitmax = fileref.read(bit32_offset_signedlong)
print("------------------------------")

print("starting 32bit max plus one read")
datpart_32bitmaxplus1 = fileref.read(bit32_offset_signedlong + 1)
print("------------------------------")

这会产生如下输出:

python version: 2.7.12 |Continuum Analytics, Inc.| (default, Jun 29 2016, 11:07:13) [MSC v.1500 64 bit (AMD64)]
platform: ('64bit', 'WindowsPE')
------------------------------
starting 32bit max read
------------------------------
starting 32bit max plus one read
Traceback (most recent call last):
  File "C:\Projects\Tampa\LASPY_EVLR\check_clong.py", line 18, in <module>
    datpart_32bitmaxplus1 = fileref.read(bit32_offset_signedlong + 1)
OverflowError: Python int too large to convert to C long
Press any key to continue . . .

这正常吗?我认为 python 可以读取 "unlimited" 文件大小(仅受可用 RAM 和 OS 位大小的限制),如下所述: Max size of a file Python can open?

需要说明的是,这个问题只有在使用read方法的offset参数时才会出现。我可以读取和写入大于 32 位有符号整数大小的文件,就在我尝试使用读取偏移参数读取文件的一部分时,出现了溢出错误。我的最终目标是在非常大的 (6GB) 文件的尾部附近附加一些数据。

我的 python 安装有问题吗?如果是这样,也许我可以做些什么来解决这个问题...

发生这种情况是因为您调用的函数位于需要 32 位偏移值的 C 函数之上。 Python 整数不限于此范围,但 C 函数是。

另请注意,如果您曾经管理过,读取将指定最多 2GB 的读取。如果文件超过该长度,您是否准备好处理 2GB 的字符串项?