2024-10-03 21:33:05 发布
网友
我使用的是函数os.path.getsize(),它以字节为单位给出文件的大小。在
os.path.getsize()
因为我的一个文件大小是10gb,所以它给我的大小是负数(字节)。在
有人能告诉我为什么会这样吗?在
这是我的代码:
import os ospathsize = os.path.getsize('/home/user/Desktop/test1.nrg') print (ospathsize)
看起来像是32位int的溢出,其大小限制为4GB。这可能是特定版本的Python中的一个bug(甚至是缺少的编译标志)。我只是在一个32位的Linux系统中使用python2.4和2.6进行了尝试;对于大于4GB的文件,这两种方法都能给出正确的结果。在
尝试升级您的Python;修复可能是一个次要版本。在
由于ls -l可以正常工作,因此Linux内核显然具有较大的文件支持。因此,您的Python安装缺少支持。(您是否在使用发行版的Python包?是什么分布?)在
ls -l
关于POSIX large file support in Python的文档指出,如果在Linux上可用,Python通常应该使用大文件支持。它还建议尝试使用命令行配置Python
CFLAGS='-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' OPT="-g -O2 $CFLAGS" \ ./configure
最后,引用man page of the ^{} system call:
This can occur when an application compiled on a 32-bit platform without -D_FILE_OFFSET_BITS=64 calls stat() on a file whose size exceeds (1<<31)-1 bits.
-D_FILE_OFFSET_BITS=64
stat()
(1<<31)-1
(我认为最后一个字应该是“字节”。)
看起来像是32位int的溢出,其大小限制为4GB。这可能是特定版本的Python中的一个bug(甚至是缺少的编译标志)。我只是在一个32位的Linux系统中使用python2.4和2.6进行了尝试;对于大于4GB的文件,这两种方法都能给出正确的结果。在
尝试升级您的Python;修复可能是一个次要版本。在
由于
ls -l
可以正常工作,因此Linux内核显然具有较大的文件支持。因此,您的Python安装缺少支持。(您是否在使用发行版的Python包?是什么分布?)在关于POSIX large file support in Python的文档指出,如果在Linux上可用,Python通常应该使用大文件支持。它还建议尝试使用命令行配置Python
最后,引用man page of the ^{} system call :
(我认为最后一个字应该是“字节”。)
相关问题 更多 >
编程相关推荐