问题描述
我正在开发一个使用线程和file.seek从互联网下载“大文件”(从200mb到5Gb)的程序,以查找偏移并将数据插入到主文件中,但是当我尝试将偏移设置为2147483647字节以上时(超过C long最大值),它会使int太大而无法转换为C long误差。 我该如何解决? 波纹管代表了我的脚本代码。
f = open("bigfile.txt")
#create big file
f.seek(5000000000-1)
f.write("\0")
#try to get the offset, this gives the error (Python int too large to convert to C long)
f.seek(3333333333, 4444444444)
我不会问(因为已经被问了很多)我是否真的找到了解决方案。
我读过有关将其强制转换为int64并使用类似UL的信息,但我不太了解。 希望您能帮忙,或者至少让我想清楚。 的xD
1楼
f.seek(3333333333, 4444444444)
第二个参数应该是from_where
参数,指示您是否要从以下位置进行搜索:
-
文件开始,
os.SEEK_SET
或0
; -
当前位置
os.SEEK_CUR
或1
; -
文件末尾,
os.SEEK_END
或2
。
4444444444
不是允许的值之一。
以下程序可以正常运行:
import os
f = open("bigfile.txt",'w')
f.seek(5000000000-1)
f.write("\0")
f.seek(3333333333, os.SEEK_SET)
print f.tell() # 'print(f.tell())' for Python3
并输出预期的3333333333
。