自上次在Python中打开文件以来的时间

时间:2018-01-15 09:16:29

标签: python

我试图创建一个脚本,它将文件夹作为输入,并删除超过一周的文件。 我看了很多地方寻求帮助,但出于某种原因,我的程序没有按预期做出反应。 我用:

os.stat('testFile1.txt').st_mtime
os.stat('testFile1.txt').st_atime

我希望atime能够返回上次访问文件的时间,以及mtime上次修改的时间,以秒为单位。

即使我刚打开一个文件,我在两者上都得到了一个非常高的数字。

我做错了吗?我应该用另一种方法来抽出时间吗?

3 个答案:

答案 0 :(得分:0)

澄清:

|  st_atime
|      time of last access
|  st_ctime
|      time of last change
|  st_mtime
|      time of last modification

您正在获取时间戳。我想你想要它作为日期时间而不是? 从那里你可以使用timedelta来找出日期时间的大小。

import os
import datetime


datetime.datetime.fromtimestamp(os.stat("test").st_mtime)
datetime.datetime.now() - datetime.datetime.fromtimestamp(os.stat("test").st_mtime)

提供输出:

datetime.datetime(2018, 1, 11, 8, 23, 23, 913330)
datetime.timedelta(4, 7252, 17055)

来自输入数据:

drobban@xps:~/Desktop$ ls -lrt test
-rw-rw-r-- 1 drobban drobban 0 jan 11 08:23 test

答案 1 :(得分:0)

我相信你没有将纪元时间转换为日期时间 来自https://docs.python.org/2/library/stat.html

stat.ST_ATIME - 上次访问时间

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.stat('/tmp/test.txt').st_atime))
>>>'2018-01-15 14:51:23'

stat.ST_MTIME - 上次修改时间

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.stat('/tmp/test.txt').st_mtime))
>>>'2018-01-15 14:51:25'

您甚至可以使用stat.ST_CTIME

检查文件的metadta更改

答案 2 :(得分:0)

您获得的数字是Unix格式的时间戳。它代表自UTC 1970年开始以来的秒数(这就是为什么它如此之大)。

为了将其转换为更有用的内容,您可以使用datetime.fromtimestamp()

from datetime import datetime

filename = "testFile1.txt"
file_stat = os.stat(filename)
last_modification = datetime.fromtimestamp(file_stat.st_mtime)    
last_access = datetime.fromtimestamp(file_stat.st_atime)

您到达这里的时间不是“,因为最后一次更改”。为了获得自修改或访问以来经过的时间量,您需要从当前时间中减去修改/访问时间:

current_time = datetime.now()
time_since_last_modification = current_time - last_modification
time_since_last_access = current_time - last_access

上面的代码会生成两个timedelta个对象。在您的应用程序中,您需要将这些转换为天,这是微不足道的:

days_since_last_modification = time_since_last_modification.days
days_since_last_access = time_since_last_access.days

整个代码

总结一下,这段代码:

from datetime import datetime

filename = "testFile1.txt"
file_stat = os.stat(filename)
last_modification = datetime.fromtimestamp(file_stat.st_mtime)    
last_access = datetime.fromtimestamp(file_stat.st_atime)

current_time = datetime.now()
time_since_last_modification = current_time - last_modification
time_since_last_access = current_time - last_access

days_since_last_modification = time_since_last_modification.days
days_since_last_access = time_since_last_access.days

msg = "{} was modified {} days ago, with last access {} days ago"
msg = msg.format(filename, days_since_last_modification,
                 days_since_last_access)
print(msg)

将输出一些内容:

testFile1.txt was modified 4 days ago, last access was 2 days ago