我需要在Python 2程序中遍历文件系统树,并获取每个文件的完整纳秒精度修改时间戳。我希望在Python中完成这个操作,因为为每个文件生成新的子进程会很慢。
在Linux的C库中,您可以通过查看
在Linux的C库中,您可以通过查看
stat
结果的st_mtime_nsec
字段来获取纳秒级精度的时间戳。例如:#include <sys/stat.h>
#include <stdio.h>
int main() {
struct stat stat_result;
if(!lstat("/", &stat_result)) {
printf("mtime = %lu.%lu\n", stat_result.st_mtim.tv_sec, stat_result.st_mtim.tv_nsec);
} else {
printf("error\n");
return 1;
}
}
打印 mtime = 1380667414.213703287
(/
在支持纳秒时间戳的 ext4 文件系统上,时钟为 UTC)。
同样地,date --rfc-3339=ns --reference=/
打印 2013-10-01 22:43:34.213703287+00:00
。
Python(2.7.3)的 os.path.getmtime(filename)
和 os.lstat(filename).st_mtime
将 mtime 给出为 float
。但是,结果是错误的:
In [1]: import os
In [2]: os.path.getmtime('/') % 1
Out[2]: 0.21370339393615723
In [3]: os.lstat('/').st_mtime % 1
Out[3]: 0.21370339393615723
——只有前6位数字是正确的,可能是由于浮点误差导致的。
{1:d}
应更改为{1:09d}
。 - falsetruimport os; open('/tmp/a.tmp','w').close(); os.utime('/tmp/a.tmp', (1.0001, 1.001)); stat = ffi.new('struct stat *'); print(os.path.getmtime('/tmp/a.tmp')); c.stat('/tmp/a.tmp', stat); print('{}.{}'.format(stat.st_mtim.tv_sec, stat.st_mtim.tv_nsec))
- falsetru