我正在尝试获取仍在由另一个进程下载的文件的大小。我使用了下面的代码(我在这里找到):
os.stat(filepath).st_blocks*512
但是,它也返回文件的分配大小。在最近的检查中,我发现这个解决方案的准确性取决于它正在运行的操作系统。目前,我的操作系统是带有 ext3 文件系统的 ubuntu 12.04 服务器。有没有另一种方法可以在 python 中找到真实的文件大小?
在某些 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
属性可用,那么如果它是其他值,请不要感到惊讶。
尝试
os.stat(filepath).st_size
似乎它返回您在“ls -l”中看到的内容
独立于您的 SO,您可以访问文件的元数据:
metadata = os.stat(path_to_file)
metadata.st_size