下面是详细讲解“python 写一个文件分发小程序”的完整攻略:
1. 思路分析
- 首先需要读取一个巨型文件目录,这个目录中包含多个文件和子目录,需要依次遍历它们;
- 判断目录结构中是否有新文件加入,如果有则加入待分发队列中;
- 对于待分发的文件,需要定时检查目标位置是否已经存在该文件。如果不存在就将它发送到目标位置。
- 最好使用对象化的开发方式,以便复用代码。
2. 文件目录结构
代码示例:
import os
class Package(object):
'''包的类'''
def __init__(self, src, dest):
self.src = src
self.dest = dest
def mkdir(self, path):
'''创建目录'''
os.makedirs(path, exist_ok=True)
def copy(self, path):
'''复制文件'''
print("正在复制文件 %s 至 %s" % (self.src, path))
def start(self):
'''开始分发'''
self.mkdir(self.dest)
self.copy(self.dest)
3. 功能开发
代码示例:
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class WatchDog(FileSystemEventHandler):
'''文件监听类'''
def __init__(self, root):
self.root = root
def get_package(self, src, dest):
'''生成包'''
return Package(src, dest)
def on_created(self, event):
'''文件创建'''
if os.path.isdir(event.src_path):
print("检测到新目录: %s" % event.src_path)
else:
print("检测到新文件: %s" % event.src_path)
file_ext = os.path.splitext(event.src_path)[1]
if file_ext == ".txt":
package = self.get_package(event.src_path, "/tmp/")
package.start()
def run():
'''运行程序'''
observer = Observer()
observer.schedule(WatchDog("/data/"), "/data", True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
4. 示例说明
当程序运行时,它会查找指定的源目录。如果有新的文本文件添加到该目录中,程序会生成一个新的 Package 对象,然后将该对象添加到待处理队列中。
假设我们现在有一个名为 /data/
的目录,里面有一个文本文件 test.txt
。当我们启动程序时,它会找到该文件,然后将其复制到 /tmp/
目录。
另一种示例是,当新目录被添加进 /data/
目录时,程序也会检测到该事件。在这种情况下,程序会在日志中输出相应信息并继续运行。
以上就是“python 写一个文件分发小程序”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 写一个文件分发小程序 - Python技术站