我试图创建一个脚本,它将文件夹作为输入,并删除超过一周的文件。 我看了很多地方寻求帮助,但出于某种原因,我的程序没有按预期做出反应。 我用:
os.stat('testFile1.txt').st_mtime
os.stat('testFile1.txt').st_atime
我希望atime
能够返回上次访问文件的时间,以及mtime
上次修改的时间,以秒为单位。
即使我刚打开一个文件,我在两者上都得到了一个非常高的数字。
我做错了吗?我应该用另一种方法来抽出时间吗?
答案 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
答案 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