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