为什么os.path.getsize()返回10gb文件的负数?

2024-10-03 21:33:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是函数os.path.getsize(),它以字节为单位给出文件的大小。在

因为我的一个文件大小是10gb,所以它给我的大小是负数(字节)。在

有人能告诉我为什么会这样吗?在

这是我的代码:

import os
ospathsize = os.path.getsize('/home/user/Desktop/test1.nrg')
print (ospathsize) 

Tags: 文件path函数代码importhome字节os
2条回答

看起来像是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

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.

(我认为最后一个字应该是“字节”。)

相关问题 更多 >