3 回答
TA贡献1811条经验 获得超6个赞
问题在于copystat通话期间不同格式之间的转换。这是因为Windows将文件时间存储为定点十进制格式,而Python将它们存储为浮点二进制格式。因此,每次在两种格式之间进行转换时,都会损失一些精度。copystat通话期间:
os.stat将Windows格式转换为Python浮点格式的调用。某些准确性会丢失。os.utime被称为更新文件时间。这会将其转换回Windows格式。某些准确性再次丢失,文件时间不一定与第一个文件相同。
当您打电话给os.lstat自己时,将执行第三次不准确的转换。由于进行了这些转换,因此文件时间并不完全相同。
的文档中os.utime提到了这一点:
请注意,根据操作系统记录访问和修改时间的分辨率,后续的stat()调用可能不会返回您在此处设置的确切时间。
关于第二个问题(为什么两个print似乎都显示相同的值):将浮点值转换为带有str(f)或的字符串print f将舍入该值。要获得保证对于不同的浮点值唯一的值,请print repr(f)改用。
TA贡献1843条经验 获得超7个赞
尝试在浮点数中打印时差: print float.hex( t1 - t2)
结果:
0x1.0000000000000p-22
0x1.8000000000000p-21
0x0.0p+0
0x1.0000000000000p-20
我的2cents猜测:输出的变化来自浮点表示偏差和舍入误差。无论如何,在比较两个浮点数时,应始终使用epsilon值。
编辑:检查此Python错误。
这是系统限制。底层文件系统支持文件戳的纳秒分辨率,并且stat(2)还支持报告它们。但是,utimes(2)设置时仅支持微秒分辨率。
比较两个浮点数时,您最多只能使用微秒分辨率。
添加回答
举报
