在我的(假设是64位Windows,64位2.7 Python)安装中,文件读取函数使用的是4字节c_long(有符号长整型)。 我测试了基本的Python文件读取函数,我不能传递超过最大有符号长整数值(2,147,483,647)的偏移量。不确定这是由于我的Python安装存在问题还是这确实是Python从文件中读取的最大限制...
以下是我的测试代码:
这会产生如下输出:
这正常吗?我以为Python可以读取“无限”文件大小(仅受可用RAM和OS位数限制),如此处所讨论的: Python可以打开的文件的最大大小? 需要澄清的是,当使用read方法的offset参数时才会出现此问题。我可以读写比32位带符号整数大小还大的文件,只有在尝试使用读取偏移量参数读取文件的一部分时才会出现溢出错误。我的最终目标是在非常大的(6GB)文件末尾附加一些数据。
我的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位数限制),如此处所讨论的: Python可以打开的文件的最大大小? 需要澄清的是,当使用read方法的offset参数时才会出现此问题。我可以读写比32位带符号整数大小还大的文件,只有在尝试使用读取偏移量参数读取文件的一部分时才会出现溢出错误。我的最终目标是在非常大的(6GB)文件末尾附加一些数据。
我的Python安装有问题吗?如果是这样,也许有什么方法可以解决这个问题...
rb
- Wajahat