时间模块和文件更改

时间:2015-11-12 13:39:30

标签: python

我需要编写一个执行以下操作的脚本

编写一个python脚本,列出当前目录中的所有文件和目录以及在最后X分钟内修改过的所有子目录。 应将X作为命令行参数。 检查此参数是否存在,如果不存在,则退出并显示相应的错误消息。 X应该是一个小于或等于120的int。如果不是,请退出并显示一条合适的错误消息。 对于这些文件和目录中的每一个,列出修改时间,无论是文件还是目录, 和它的大小。

我想出了这个

#!/usr/bin/python


import os,sys,time

total = len(sys.argv)

if total < 2:
    print "You need to enter a value in minutes"
    sys.exit()

var =  int(sys.argv[1])


if var < 1 or var > 120 :
    print "The value has to be between 1 and 120"
    sys.exit()
past = time.time() - var * 60

result = []

dir = os.getcwd()


for p, ds, fs in os.walk(dir):
    for fn in fs:
        filepath = os.path.join(p, fn)  
        status = os.stat(filepath).st_mtime
        if os.path.getmtime(filepath) >= past:
            size = os.path.getsize(filepath)
            result.append(filepath)
            created = os.stat(fn).st_mtime 
            asciiTime = time.asctime( time.gmtime( created ) ) 
            print "Files that have changed are %s"%(result)
            print "Size of file is %s"%(size)

所以它用这样的东西报告

Files that have changed are ['/home/admin/Python/osglob2.py']
Size of file is 729
Files that have changed are ['/home/admin/Python/osglob2.py', '/home/admin/Python/endswith.py']
Size of file is 285
Files that have changed are ['/home/admin/Python/osglob2.py', '/home/admin/Python/endswith.py', '/home/admin/Python/glob3.py']
Size of file is 633

我如何才能停止重播文件?

2 个答案:

答案 0 :(得分:1)

您的代码构建其遇到的所有文件的列表的原因是

result.append(filepath)

以及每次打印出整个列表的原因是

print "Files that have changed are %s"%(result)

所以你需要更改其中一行:要么替换列表,要么替换它,或者(更明智的IMO)只打印出找到的最新文件名,而不是整个列表。

答案 1 :(得分:0)

您不会在每次迭代结束时清除结果列表。在第二个result.clear()语句后尝试print之类的内容。确保它与for处于同一缩进,而不是print