首页 > 解决方案 > ZipFile.extract 将文件夹提取到目录而不是包含的文件

问题描述

我想要实现的是一个文件夹观察程序,它检查一个新的 zip 文件是否包含 .cube 文件,如果是,将这些文件提取到另一个文件夹,但似乎发生的是......它成功检查它是否包含 .cube 文件但是当它要提取时,它会提取父文件夹,我只想提取并移动其中的文件。

import time
import json
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
from zipfile import *

if __name__ == "__main__":
    patterns = ["*.zip"]
    ignore_patterns = None
    ignore_directories = False
    case_sensitive = False
    my_event_handler = PatternMatchingEventHandler(patterns, ignore_patterns, ignore_directories, case_sensitive)


def on_created(event):
    handle_move(event)

def on_modified(event):
    handle_move(event)

def on_moved(event):
    handle_move(event)

def is_eligible(file_name):
    f = open('./rules.json')
    data = json.load(f)

    for i in data:
        print()
        if file_name.upper().endswith(i["extension"].upper()):
            return True

def trim_filename(fileName):
    splitFileName = fileName.split("/")
    return splitFileName[len(splitFileName) - 1]

def handle_move(event):
    with ZipFile(event.src_path, 'r') as zipObj:
        listOfFileNames = zipObj.namelist()
        for fileName in listOfFileNames:
            if is_eligible(fileName):
                trimmedFileName = trim_filename(fileName)
                print(event.src_path)
                zipObj.extract(fileName,'D:/Temp Files/folder/')
                print(trimmedFileName)

my_event_handler.on_created = on_created
my_event_handler.on_modified = on_modified
my_event_handler.on_moved = on_moved

path = "D:/Temp Files"
go_recursively = True
my_observer = Observer()
my_observer.schedule(my_event_handler, path, recursive=go_recursively)

my_observer.start()
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    my_observer.stop()
    my_observer.join()

标签: pythonpython-3.xzipfilepython-watchdog

解决方案


推荐阅读