2

django 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 小时内..有人可以帮我吗?

4

2 回答 2

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
于 2012-07-05T03:04:55.910 回答
1

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

于 2012-07-05T03:14:31.980 回答