From 40d7953e3ab23e55d1aaecfc5d9193cf91fc43c8 Mon Sep 17 00:00:00 2001 From: Shuming Liu Date: Sun, 5 Apr 2026 16:39:07 +0800 Subject: [PATCH] continue.... --- server/file_association.py | 43 +++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/server/file_association.py b/server/file_association.py index b838700..c71f6ed 100644 --- a/server/file_association.py +++ b/server/file_association.py @@ -15,7 +15,6 @@ from datetime import datetime import time import re import shutil -import shutil def clear_directory(dir_path: Path) -> None: @@ -436,40 +435,40 @@ def main(): print(f"在 {source_dir} 中未发现 zip 文件") return - # 清空 data 目录 - clear_directory(data_dir) - print(f"找到 {len(zip_files)} 个压缩文件,开始批量处理...") success_count = 0 fail_count = 0 for zip_file in zip_files: print(f"\n【开始处理】{zip_file.name}") + # 清空 data 目录 + clear_directory(data_dir) + - # 清空当前 zip 文件的提取目录 - extract_dir = data_dir / zip_file.stem - if extract_dir.exists(): - clear_directory(extract_dir) try: # 先提取所有文件 with zipfile.ZipFile(zip_file, 'r') as zip_ref: zip_ref.extractall(data_dir) + IsdirectorExtracted = False + extract_dir = data_dir / zip_file.stem # 然后遍历所有成员,设置时间戳 with zipfile.ZipFile(zip_file, 'r') as zip_ref: for member in zip_ref.infolist(): - # 构建正确的文件路径 - 先获取解压后的实际路径 + # 计算解压后的实际路径 + # 解压后,文件可能在 data_dir/zip_file.stem/ 目录下 + # 或者在 data_dir/ 下(如果 zip 内部没有额外的目录层) base_extract_path = data_dir / zip_file.stem - if member.filename.startswith(zip_file.stem + '/'): - # 文件路径包含 zip 文件名前缀 - member_path = base_extract_path / member.filename[len(zip_file.stem) + 1:] - elif member.filename.startswith(zip_file.stem): - # 文件路径直接以 zip 文件名开头 - member_path = base_extract_path / member.filename[len(zip_file.stem):].lstrip('/') + + # 如果 member.filename 以 zip_file.stem/开头,需要先去掉这个前缀 + if member.filename.startswith(zip_file.stem + '/') or member.filename.startswith(zip_file.stem + os.sep): + relative_path = member.filename[len(zip_file.stem) + 1:] + member_path = base_extract_path / relative_path else: - # 文件路径不包含前缀 - member_path = base_extract_path / member.filename + # 否则直接在 base_extract_path 下查找 + member_path = data_dir / member.filename + IsdirectorExtracted = True # 如果路径存在,设置时间戳 if member_path.exists(): @@ -479,6 +478,8 @@ def main(): os.utime(member_path, (timestamp, timestamp)) except Exception: pass + if IsdirectorExtracted: + extract_dir = data_dir # 检查是否多了一层目录 inner_dir = extract_dir / zip_file.stem @@ -511,6 +512,14 @@ def main(): if not twole_folder.exists() or not zxxk_folder.exists(): print("❌ 文件夹不存在,请先解压文件") + # 将失败的原始压缩包拷贝到本程序所在目录的 ee 子目录 + script_dir = Path(__file__).parent + ee_dir = script_dir / "ee" + ee_dir.mkdir(exist_ok=True) + dest_file = ee_dir / zip_file.name + import shutil + shutil.copy2(zip_file, dest_file) + print(f" 已拷贝失败文件到:{dest_file}") fail_count += 1 continue