1

我已经编写了一些代码,在其中获取文件的修改时间

os.path.getmtime('path')

它返回一些数字,如965465464.19234. 我将其转换为字节并通过套接字发送。在另一端,我读取了套接字并尝试使用以下方法将此时间戳设置为另一个文件:

os.utime('path',(access_time, modified_time))

access_time当我尝试设置modified_time从套接字接收的内容时,我确保保持不变。但是utime需要一个整数,所以我截断了这个数字(例如:)965465464,然后一切正常。

我会因为截断而失去任何东西吗?怎样才能做得更好?

4

2 回答 2

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 可以很好地处理浮点数。

时间

出[15]:1322517342.0

在[16]中:类型(mtime)

出[16]:浮动

于 2012-11-16T04:16:00.027 回答
2

getmtime()返回st_mtime。从文档

注意: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()to 传递到os.utime()

os.utime(path, ns=(access_time_ns, modified_time_ns))
于 2012-11-16T04:11:55.887 回答