Python的os.path.getsize()是否具有真正的字节分辨率?

时间:2018-06-13 16:17:08

标签: python filesize disk

文件系统很少允许文件长度为任意数量的字节,而是优先填充它们以适合一定数量的块。 Python的os.path.getsize()被记录为以字节为单位返回一个大小,但我不确定它是否被操作系统(在我的情况下是linux)或文件系统舍入为块大小。对于我的应用程序,我必须知道我能够从大文件中读取的确切字节数(~1GB)。对此有何保证?

1 个答案:

答案 0 :(得分:2)

Python不保证。 os.path.getsize()函数返回st_size field of a os.stat() call。这是对stat system call的直接调用。

stat的所有文档都只将st_size命名为文件大小,以字节为单位。

在我的Debian测试系统stat上提供了真正的文件大小:

$ stat -fc %s .   # fs block size
4096
$ head -c 2048 < /dev/urandom > 2kb
$ head -c 6168 < /dev/urandom > 6kb
$ head -c 12345 < /dev/urandom > 12andabitkb
$ ls --block-size=1 -s *kb     # block use in bytes
16384 12andabitkb   4096 2kb   8192 6kb
$ ls --block-size=4K -s *kb    # block count per file
4 12andabitkb  1 2kb  2 6kb
$ python3 -c 'import os, glob; print(*("{:<11} {}".format(f, os.path.getsize(f)) for f in glob.glob("*kb")), sep="\n")'
2kb         2048
12andabitkb 12345
6kb         6168