Python检测目录中丢弃的任何内容

时间:2015-08-26 13:28:05

标签: python

我们的项目中有一个要求,即检测放入python目录中的任何内容。

这个过程是这样的:

  • 每天几乎所有时间都会运行一个python脚本(一种cron作业),它会一直监视一个目录。

  • 当有人将文件放入应检测文件的目录时。

  • 删除的文件将包含zip,xml,json或ini格式。
  • 没有办法解决用户如何将文件放入该目录的问题(即,人们可以通过>>> var.decode('utf-8') Traceback (most recent call last):File "<stdin>", line 1, in <module> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte >>> var.from_bytes(2,'little') Traceback (most recent call last):File "<stdin>", line 1, in <module> AttributeError: 'bytes' object has no attribute 'from_bytes' 命令使用console简单地复制或移动文件。或者人可以执行{{1}来自其他计算机,或者可以通过我们的cp or mv
  • 上传

我可以通过网络界面删除它,但不能通过其他方式检测它。

任何人都可以建议我检测丢弃文件的方法:

FTP transfer

2 个答案:

答案 0 :(得分:0)

怎么样:

known_files = []

def detect_file(watch_folder_path):
    files = os.listdir(watch_folder_path)
    for file in files:
        if file not in known_files:                   
            #RAISE ALERT e.g. send email
            known_files.append(file)

一旦提出警报,将文件添加到known_files列表,以便它不会保持警报。

然后,您需要以自行决定的频率重复运行detect_files()。我建议使用Timer来实现此目的。或者更简单地说,在while True:语句中执行此函数,然后添加time.sleep(60)以每隔60秒运行detect_files()检查。

答案 1 :(得分:0)

如果您不想对项目使用任何依赖项,则可以依靠脚本来计算文件的更改。假设此脚本将始终运行,您可以编写以下代码:

def is_interesting_file(f):
    interesting_extensions = ['zip', 'json', 'xml', 'ini']
    file_extension = f.split('.')[-1]
    if file_extension in interesting_extension:
        return True
    return False

watch_folder_path = 0
previous_watched_files = set()

while True:
    watched_files = set(os.listdir(watch_folder_path))
    new_files = watched_files.difference(previous_watched_files)
    interesting_files = [filename for filename in new_files if is_interesting_file(filename)]
    #Do something with your interesting files

如果要使用此方法在cron或类似的东西上运行此脚本,您始终可以将目录列表保存在文件或简单数据库中作为sqlite,并将其分配给previous_watched_files变量。然后,您可以进行一次迭代,查看目录以进行更改,清除数据库/文件记录,并使用更新的列表结果再次创建它们。