谁能告诉我这个值的含义是什么st_ino
是跑步时os.stat()
在 Windows 上(Python 3.5.3)?
在早期的 Python 版本中,它包含虚拟值,但最近发生了变化,我找不到它是如何计算/生成的。我怀疑它因文件系统(NTFS、FAT...)而异
Example
import os
stat = os.stat(r'C:\temp\dummy.pdf')
for attr in dir(stat):
if attr.startswith('st_'):
print('{}: {}'.format(attr,
stat.__getattribute__(attr)))
Result
st_atime: 1495113452.7421005
st_atime_ns: 1495113452742100400
st_ctime: 1495113452.7421005
st_ctime_ns: 1495113452742100400
st_dev: 2387022088
st_file_attributes: 33
st_gid: 0
st_ino: 10414574138828642
st_mode: 33060
st_mtime: 1494487966.9528062
st_mtime_ns: 1494487966952806300
st_nlink: 1
st_size: 34538
st_uid: 0
背景
我用的是shutil.copyfile()
函数 an 遇到了 anSameFileError
。在查看了代码之后(尽管它在评论中说了shutil.py
) the shutil._samefile()
函数确实not比较 Windows 中的路径名。相反,它使用os.path.samefile()
这比较了st_ino
and st_dev
values.
源文件和目标文件都驻留在同一设备(卷)上,这可以解释为什么值st_dev
是一样的。但我还是很困惑为什么st_ino
两个文件具有相同的值。
备注:这两个文件都位于使用 webDAV 安装的 Sharepoint 卷上,因此它们的st_ino
值可能是0
(虚拟),这可以解释为什么它们是相等的。不过我还是很好奇;-)
Update
正如我怀疑的那样,价值st_ino
驻留在 Sharepoint 卷 (WebDAV) 上的文件返回的值是0
,就像st_dev
。这就是(错误的)原因SameFileError
。输出示例:
\\sharepoint@SSL\AUT.pdf os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=1, st_uid=0, st_gid=0, st_size=4717, st_atime=1495031011, st_mtime=1495031011, st_ctime=1495031570)
\\sharepoint@SSL\ING.pdf os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=1, st_uid=0, st_gid=0, st_size=4722, st_atime=1495031203, st_mtime=1495031203, st_ctime=1495031733)
\\sharepoint@SSL\WAG.pdf os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=1, st_uid=0, st_gid=0, st_size=4710, st_atime=1495031511, st_mtime=1495031511, st_ctime=1495031912)