我正在尝试获取仍由另一个进程下载的文件的大小。我使用下面的代码(我在here中找到):
os.stat(filepath).st_blocks*512
但是,它也会返回文件的分配大小。在最近的检查中,我发现这个解决方案的准确性取决于它正在进行的操作系统。目前,我的操作系统是带有ext3文件系统的ubuntu 12.04服务器。还有另一种方法可以在python中找到真正的文件大小吗?
答案 0 :(得分:7)
在某些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