0

全部。

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

我使用操作系统模块 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

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

编辑 - 抱歉,如果我发牢骚,我已经为此工作了一段时间,这非常令人沮丧。我很感激你能给的任何帮助!!!

4

3 回答 3

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()
于 2012-10-09T16:28:01.607 回答
0

我无法确定 sendmail 到底在做什么/它应该做什么。您也可以发布该模块吗?

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

此外,我无法理解“os.listdir(path, f)”这一行在做什么。每当我尝试使用超过 1 个参数的方法 os.listdir 时,都会出现错误。这是一个错字吗?

于 2012-10-09T16:18:24.297 回答
0

我使用操作系统模块 ctime 来检查文件的年龄......

哎呀!ctime 不是在所有操作系统上创建文件的时间;除非您确定您使用的是哪个操作系统,否则不要依赖它。mtime 是最后修改时间,但在所有操作系统上都受支持。

于 2012-10-09T16:20:43.213 回答