文件的实际大小

时间:2012-10-18 08:43:07

标签: python file metadata

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

os.stat(filepath).st_blocks*512

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

3 个答案:

答案 0 :(得分:7)

来自documentation for stat()

  

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

     
      
  • st_blocks - 为文件分配的512字节块数
  •   
  • st_blksize - filesystem blocksize
  •   
  • st_rdev - inode设备的设备类型
  •   
  • st_flags - 用户定义的文件标志
  •   

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


注意: 当它显示“ st_blocks - 为文件分配的512字节块数”时,数字为512实际上是系统依赖的。 The POSIX specification

  

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

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

答案 1 :(得分:1)

尝试

os.stat(filepath).st_size

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

答案 2 :(得分:0)

您可以访问文件的元数据

metadata = os.stat(path_to_file)
metadata.st_size