听新文件Python

时间:2015-08-07 19:07:12

标签: python file directory os.walk

我正在努力找到解决我遇到的问题的方法...... 我有一个很大的份额,包含数十万(如果不是数百万)的文件和每秒到达的新文件。 我正在尝试编写一个应用程序,它可以更快地在共享中查找文件,我的想法是将所有文件名插入到Redis DB中,格式为: {'file_name','file_path'}并且需要一个文件从DB中提取其路径... 当我尝试索引所有旧文件(我假设它至少需要几个小时)时,问题就开始了,同时simeltanious听取在此过程中到达的新文件。 这是我正在尝试做的一个例子:

import redis
import os
r = redis.StrictRedis(host='localhost',port=6379,db=0)
for root, dirs, files in os.walk(r'D:\\'):
    for file in files:
        r.set(os.path.basename(file),os.path.join(root, file))
        print 'The file %s was succefuly added' %os.path.basename(file)

我应该如何修改我将继续收听新文件的代码?

感谢您的帮助!=)

1 个答案:

答案 0 :(得分:0)

您应该查看watchdog库。它完全符合您的要求。以下是使用它的示例:

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()