使用python删除未访问的文件

时间:2012-07-05 03:01:32

标签: python file time

我的django app解析用户上传的一些文件。用户上传的文件可能会长时间保留在服务器中,而不会被应用程序解析。这可能会增加如果很多用户上传了很多文件。

我需要删除那些最近未被app -say not accessed for last 24 hours解析的文件。我试过这样的

import os
import time

dirname = MEDIA_ROOT+my_folder
filenames = os.listdir(dirname)
filenames = [os.path.join(dirname,filename) for filename in filenames]
for filename in filenames:
    last_access = os.stat(filename).st_atime #secs since epoch
    rtime = time.asctime(time.localtime(last_access))
    print filename+'----'+rtime

这显示了每个文件的最后访问时间。但是我不知道如何测试文件访问时间是否在过去24小时内。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

结帐time.time()。它允许您在utc时间访问当前时间戳。然后,您可以从文件时间戳中减去当前标记,看它是否大于24 * 60 * 60。

http://docs.python.org/library/time.html#time.time

另外,请记住,很多时候,Linux文件系统是使用noatime挂载的,这意味着可能不会填充st_atime变量。您应该使用st_mtime,只是为了安全起见,除非您100%确定文件系统将始终按照记录的时间进行挂载。

这是一个应该是一个有效的例子,我还没有调试过。

import os
import time

dirname = MEDIA_ROOT+my_folder
filenames = os.listdir(dirname)
filenames = [os.path.join(dirname,filename) for filename in filenames]
for filename in filenames:
    last_access = os.stat(filename).st_mtime #secs since epoch
    timediff = time.gmtime() - last_access
    print filename+'----'+timediff
    if timediff > 24*60*60:
        print 'older than a day'
        # do your thing

答案 1 :(得分:1)

为什么要打扰实际日期?只需检查os.stat(filename).st_atime < time.time() - 24*60*60