我已经编写了一些代码,我可以使用
获取文件的修改时间os.path.getmtime('path')
返回一些像965465464.19234
这样的数字。我将其转换为字节并通过套接字发送。在另一端,我读取套接字并尝试使用以下命令将此时间戳设置为另一个文件:
os.utime('path',(access_time, modified_time))
当我尝试设置从套接字收到的access_time
时,我确保modified_time
保持不变。但utime
需要一个整数,所以我截断了数字(例如:965465464
),然后就可以正常工作了。
我是否因为截断而丢失任何东西?如何做得更好?
答案 0 :(得分:3)
我不认为问题与modified_time是浮点数还是整数有关。下面的代码应该有效。我做了一切,但通过电线发送。
import os
from datetime import datetime
from calendar import timegm
import sys
st_info = os.stat('foo.py')
st_info.st_atime #acces time
st_info.st_mtime #modified time
mtime = st_info.st_mtime
atime = st_info.st_atime
# send over the wire
os.utime('foo.py', (atime, mtime))
正如你所看到的,os.utime可以用漂浮物做得很好。
修改时间
Out [15]:1322517342.0
在[16]中:输入(mtime)
Out [16]:float
答案 1 :(得分:2)
getmtime()
返回st_mtime
。来自the docs:
注意: st_atime,st_mtime和的确切含义和解析 st_ctime属性取决于操作系统和文件 系统。例如,在使用FAT或FAT32文件的Windows系统上 系统,st_mtime有2秒的分辨率,而st_atime只有1天 解析度。有关详细信息,请参阅操作系统文档 同样,虽然st_atime_ns,st_mtime_ns和st_ctime_ns是 总是用纳秒表示,很多系统都没有提供 纳秒精度。在提供纳秒精度的系统上, 用于存储st_atime,st_mtime和的浮点对象 st_ctime无法保留所有内容,因此会略有不同 不精确。 如果您需要确切的时间戳,则应始终使用 st_atime_ns,st_mtime_ns和st_ctime_ns。
强调我的
您可以使用ns
参数将整数纳秒从os.stat()
传递到os.utime()
:
os.utime(path, ns=(access_time_ns, modified_time_ns))