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

时间:2011-03-02 11:57:02

标签: python linux file-io

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

由于我的一个文件大小为10gb,因此我给出了负数(字节)的大小。

所以有人可以告诉我为什么会这样吗?

这是我的代码:

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

2 个答案:

答案 0 :(得分:10)

您的Linux内核显然具有大量文件支持,因为ls -l正常工作。因此,您的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 stat system call

  

如果应用程序在32位平台上编译而没有-D_FILE_OFFSET_BITS=64在大小超过stat()位的文件上调用(1<<31)-1,则会发生这种情况。

(我相信最后一个字应该是“字节”。)

答案 1 :(得分:1)

看起来像32位int的溢出用于大小,限制为4GB。这可能是您特定版本的Python中的错误(甚至缺少编译标记)。我只是在一个32位的Linux机器中使用python 2.4和2.6进行了尝试;两者都对大于4GB的文件给出正确的结果。

尝试升级Python;修复可能是一个小版本。