python文件读取“int太大而无法转换为c long”

时间:2016-08-22 15:41:32

标签: python python-2.7 long-integer

在我的(可能是64位Windows,64位2.7 python)安装上,文件读取功能使用4字节c_long(签名长)。 我测试了基本python文件读取函数,我无法传递超过max signed long整数值(2,147,483,647)的偏移量。不确定这是否是由于我的python安装有问题,或者这是否真的是从python中读取文件的最大限制...

我的测试代码如下:

import sys
import platform

inFileName = r'C:\Projects\Tampa\LASPY_EVLR\LAS_DATA\input\Large_LAS\20505.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可以读取“无限”文件大小(仅受可用RAM和OS位大小的限制),如下所述: Max size of a file Python can open?

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

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

1 个答案:

答案 0 :(得分:1)

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

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