Python:file.seek(1000000000020000000000)。Python int太大,无法转换为C long

Python:file.seek(1000000000020000000000)。Python int太大,无法转换为C long,python,file,int,Python,File,Int,我正在开发一个程序,使用线程和文件从互联网下载“大文件”(从200mb到5Gb)。查找偏移量并将数据插入主文件,但当我尝试将偏移量设置在2147483647字节以上(超过C long max值)时,会使int太大,无法转换为C long错误。我怎样才能解决这个问题?Bellow是我的脚本代码的一种表示形式 f = open("bigfile.txt") #create big file f.seek(5000000000-1) f.write("\0") #try to get the of

我正在开发一个程序,使用线程和文件从互联网下载“大文件”(从200mb到5Gb)。查找偏移量并将数据插入主文件,但当我尝试将偏移量设置在2147483647字节以上(超过C long max值)时,会使int太大,无法转换为C long错误。我怎样才能解决这个问题?Bellow是我的脚本代码的一种表示形式

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

f.seek(3333333333, 4444444444)
第二个参数应该是
from\u,其中
参数,指示您是否正在寻找:

  • 文件开始,
    os.SEEK\u SET
    0
  • 当前位置,
    os.SEEK_CUR
    1
  • 文件的结尾,
    os.SEEK\u end
    2
4444
不是允许的值之一

以下程序运行良好:

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

并按预期输出
3333333

我不确定如何解决您的主要问题,但这里有一个相关的观察结果:我不认为查找和写入文件实际上会“插入”文本-相反,我认为它会在查找点覆盖现有文本我理解您的意思及其正确性。我想做的是用无用的数据创建一个5gb的文件(大小取决于下载文件的大小),然后使用指向指定偏移量的file.seek用正确的数据覆盖它(因为文件是用几个线程下载的,我需要将数据写入该文件的正确位置)。我想我没有解释清楚。但是谢谢你的回复;)在许多文件系统中,打开一个文件进行写入、寻找一个较长的距离,然后写入一些内容,几乎没有分配任何空间。结果是一个i节点中有很长的长度,但没有实际分配给它的磁盘块。要实际预分配空间,您需要写入您想要分配的每个块。谢谢!它起作用了,我想我没有真正理解文档,我想,通过seek我可以从文件中获得数据的偏移量。第一个参数是开始,第二个参数是结束(4444-3333333):):):)@user3754262:pass
os.SEEK.*
常量作为第二个参数。