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

Python';s os.path.getsize()是否具有真正的字节分辨率?,python,filesize,disk,Python,Filesize,Disk,文件系统很少允许文件的长度为任意字节数,而是更愿意将其填充到特定数量的块中。Python的os.path.getsize()被记录为以字节为单位返回大小,但我不确定它是否由操作系统(在我的例子中是linux)或文件系统四舍五入到块大小。对于我的应用程序,有必要知道能够从大文件(~1GB)中读取的确切字节数。对此有何保证 Python不提供任何保证。函数的os.path.getsize()返回。这是一个直接的电话 stat的所有文档仅将st_size命名为文件大小,以字节为单位 在我的Debian

文件系统很少允许文件的长度为任意字节数,而是更愿意将其填充到特定数量的块中。Python的os.path.getsize()被记录为以字节为单位返回大小,但我不确定它是否由操作系统(在我的例子中是linux)或文件系统四舍五入到块大小。对于我的应用程序,有必要知道能够从大文件(~1GB)中读取的确切字节数。对此有何保证

Python不提供任何保证。函数的
os.path.getsize()
返回。这是一个直接的电话

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
$stat-fc%s.#fs块大小
4096
$head-c 20482kb
$head-c 61686kb
$head-c 1234512KB
$ls--块大小=1-s*kb#块使用字节
16384 12andabitkb 4096 2kb 8192 6kb
$ls--块大小=4K-s*kb#每个文件的块计数
4 12andabitkb 1 2kb 2 6kb

$python3-c'导入操作系统,glob;print(*(“{:Python不提供任何保证。
os.path.getsize()
函数返回。这是对的直接调用

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
$stat-fc%s.#fs块大小
4096
$head-c 20482kb
$head-c 61686kb
$head-c 1234512KB
$ls--块大小=1-s*kb#块使用字节
16384 12andabitkb 4096 2kb 8192 6kb
$ls--块大小=4K-s*kb#每个文件的块计数
4 12andabitkb 1 2kb 2 6kb

$python3-c'导入操作系统,glob;print(*(“{:这取决于您的文件系统。某些文件系统(如procfs和sysfs)在stat数据中根本不返回非零大小。如果您想要完全确定,请打开文件,
seek()
直到最后,然后使用
tell()
为您提供当前偏移量。也就是说,对于常用文件系统上用于常规(非生成、非虚拟、非套接字、非块设备)文件的常规文件,
os.path.getsize()
将返回您要查找的内容。这取决于您的文件系统。某些文件系统(如procfs和sysfs)不要在stat数据中返回非零大小。如果您想要完全确定,请打开文件,
seek()
到结尾,并使用
tell()
提供当前偏移量。也就是说,对于常规(非生成、非虚拟、非套接字、非块设备)常用文件系统上的常规文件文件,
os.path.getsize()
将返回您要查找的内容。