检查列表以做出决定

时间:2012-10-09 15:53:38

标签: python python-2.7

所有

我试图编写一个脚本来检查文件夹中某些文件的年龄,并在创建新文件时删除旧文件。如果没有创建新文件,那么它不会删除旧文件,它会向我发送一封电子邮件,告诉我没有创建新文件。

我使用OS模块ctime来检查文件的年龄,并且我使用外部脚本" sendmail"处理电子邮件。

现在可以正常工作,它可以正确地确定旧文件和新文件,然后删除旧文件,但它无法正确决定是否调用sendmail。让我告诉你:

for fn in os.listdir(path, f)
 fn = os.path.jion(path, f)
 ctime = os.stat(fn).st_ctime
 if ctime > now - 1 * 86400: #this is a new file
  new_files.append(fn)
  countit = new_files.count(fn) #counting the occurence of appended files
 if new_Files.count(fn) > countit: #checks the list
  import sendmail
   sendmail
 elif ctime < now - 10 * 86400: #checking for old file
  old_files.append(fn)
if new_files:
 for fn in old_files:
  os.remove(fn)

那么,我可以得到一些帮助吗?我真的卡住了。我应该使用elif语句检查我的列表,如下所示:

if ctime > now - 1 * 86400:
 new_files.append(fn)
elif:
 import sendmail
  sendmail

这是一种正确的写法吗?有没有正确的方法来写这个决定?我的整个剧本错了吗?

编辑 - 对不起,如果我发牢骚,我已经在这方面工作了一段时间,这非常令人沮丧。我感谢您提供的任何帮助!!!

3 个答案:

答案 0 :(得分:1)

看起来你可能想做这样的事情:

for fn in os.listdir(path, f):
    fn = os.path.join(path, f)
    ctime = os.stat(fn).st_ctime
    if ctime > now - 1 * 86400: #this is a new file
        new_files.append(fn)
        countit = new_files.count(fn) #counting the occurrence of appended files
    elif ctime < now - 10 * 86400: #checking for old file
        old_files.append(fn)
if new_files:
    for fn in old_files:
        os.remove(fn)
else:
    import sendmail
        sendmail.sendmail()

答案 1 :(得分:0)

我无法确定sendmail究竟在做什么/应该做什么。你也可以发布那个模块吗?

另外,我建议将import语句放在文件的顶部,这样就不必多次导入文件了。这应该会显着提高性能。

另外,我无法理解“os.listdir(path,f)”行正在做什么。每当我尝试使用带有多个参数的方法os.listdir时,我都会收到错误。这是一个错字吗?

答案 2 :(得分:0)

  

我使用OS模块ctime来检查文件的年龄......

糟糕! ctime不是在所有操作系统上创建文件的时候;除非您确定自己所在的操作系统,否则依赖它。 mtime是最后一次修改时间,但在所有操作系统上都受支持。