2

我正在尝试获取仍在由另一个进程下载的文件的大小。我使用了下面的代码(我在这里找到):

os.stat(filepath).st_blocks*512

但是,它也返回文件的分配大小。在最近的检查中,我发现这个解决方案的准确性取决于它正在运行的操作系统。目前,我的操作系统是带有 ext3 文件系统的 ubuntu 12.04 服务器。有没有另一种方法可以在 python 中找到真实的文件大小?

4

3 回答 3

6

文档中stat()

在某些 Unix 系统(例如 Linux)上,以下属性也可能可用:

  • st_blocks - 为文件分配的 512 字节块数
  • st_blksize - 文件系统块大小
  • st_rdev - 如果是 inode 设备,则为设备类型
  • st_flags - 文件的用户定义标志

你似乎想要的是st_blocks * st_blksize. 请注意,这不是文件的实际大小,它是st_size成员。块数乘以块大小将大于实际文件大小。


注意:当它显示“ st_blocks - 为文件分配的 512 字节块的数量”时,该数量512实际上取决于系统。POSIX 规范

stat结构的st_blocks成员的单位未在 POSIX.1-2008 中定义。在某些实现中,它是 512 字节。它可能因文件系统而异。

如果该st_block属性可用,那么如果它是其他值,请不要感到惊讶。

于 2012-10-18T10:43:08.317 回答
1

尝试

os.stat(filepath).st_size

似乎它返回您在“ls -l”中看到的内容

于 2012-10-18T08:53:46.417 回答
0

独立于您的 SO,您可以访问文件的元数据:

metadata = os.stat(path_to_file)
metadata.st_size
于 2012-10-18T08:54:01.737 回答