Python OSError:[Errno 22]写入tar文件的参数无效

Python OSError:[Errno 22]写入tar文件的参数无效,python,python-requests,operating-system,Python,Python Requests,Operating System,我正在尝试下载一个2.5 GB的tar文件,并用Python将该文件写入磁盘。以下内容在不同的.tar文件中运行正常,但在下面指定的tar文件中崩溃: import requests url = 'http://pixplot.yale.edu/datasets/bain/photos.tar' with open('photos.tar', 'wb') as out: r = requests.get(url, allow_redirects=True) out.write(r.co

我正在尝试下载一个2.5 GB的tar文件,并用Python将该文件写入磁盘。以下内容在不同的.tar文件中运行正常,但在下面指定的tar文件中崩溃:

import requests

url = 'http://pixplot.yale.edu/datasets/bain/photos.tar'
with open('photos.tar', 'wb') as out:
  r = requests.get(url, allow_redirects=True)
  out.write(r.content)
这引起:

<class 'requests.models.Response'>
Traceback (most recent call last):
  File "t.py", line 7, in <module>
    out.write(r.content)
OSError: [Errno 22] Invalid argument

回溯(最近一次呼叫最后一次):
文件“t.py”,第7行,在
写出(r.content)
OSError:[Errno 22]参数无效
有人知道是什么导致了这个错误吗?任何建议都会有帮助


注意:这个问题只在Python3.x中出现。如果我切换到2.7 conda环境,上面的代码段运行良好。

听起来向文件中写入如此大的数据量有问题,请尝试将其拆分为较小的数据块:

blocksize = 1000000000
for i in range(0, len(r.content), blocksize):
    out.write(r.content[i:i+blocksize])

我猜Python2.7在内部做到了这一点,但3.5没有做到。

我怀疑您使用的是32位操作系统,因此文件限制在2GB。那些日子真是太糟糕了!这是64位,我可以很好地设置同一个文件,只是不能用上面的代码段写入字节…@duhaime那么在出现错误之前,文件中实际写入了多少字节?@AndrewHenle如果系统调用报告参数错误,我不希望它写任何东西。事实上,输出文件的大小为0。你是对的——用块写很好!你知道为什么上面的代码在Python2.7中运行良好,而在3.5中运行不好吗?也许3.5是在32位模式下编译的,而不是在64位模式下编译的。啊哈!因此,这不是操作系统位模式,而是python位模式!写入>2GB的问题强烈地表明与32位ness有关。啊,可能是Python2.x做了分块,而Python3.5没有。