continue....
This commit is contained in:
@@ -15,7 +15,6 @@ from datetime import datetime
|
|||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import shutil
|
|
||||||
|
|
||||||
|
|
||||||
def clear_directory(dir_path: Path) -> None:
|
def clear_directory(dir_path: Path) -> None:
|
||||||
@@ -436,40 +435,40 @@ def main():
|
|||||||
print(f"在 {source_dir} 中未发现 zip 文件")
|
print(f"在 {source_dir} 中未发现 zip 文件")
|
||||||
return
|
return
|
||||||
|
|
||||||
# 清空 data 目录
|
|
||||||
clear_directory(data_dir)
|
|
||||||
|
|
||||||
print(f"找到 {len(zip_files)} 个压缩文件,开始批量处理...")
|
print(f"找到 {len(zip_files)} 个压缩文件,开始批量处理...")
|
||||||
success_count = 0
|
success_count = 0
|
||||||
fail_count = 0
|
fail_count = 0
|
||||||
|
|
||||||
for zip_file in zip_files:
|
for zip_file in zip_files:
|
||||||
print(f"\n【开始处理】{zip_file.name}")
|
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:
|
try:
|
||||||
# 先提取所有文件
|
# 先提取所有文件
|
||||||
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
|
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
|
||||||
zip_ref.extractall(data_dir)
|
zip_ref.extractall(data_dir)
|
||||||
|
IsdirectorExtracted = False
|
||||||
|
extract_dir = data_dir / zip_file.stem
|
||||||
|
|
||||||
# 然后遍历所有成员,设置时间戳
|
# 然后遍历所有成员,设置时间戳
|
||||||
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
|
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
|
||||||
for member in zip_ref.infolist():
|
for member in zip_ref.infolist():
|
||||||
# 构建正确的文件路径 - 先获取解压后的实际路径
|
# 计算解压后的实际路径
|
||||||
|
# 解压后,文件可能在 data_dir/zip_file.stem/ 目录下
|
||||||
|
# 或者在 data_dir/ 下(如果 zip 内部没有额外的目录层)
|
||||||
base_extract_path = data_dir / zip_file.stem
|
base_extract_path = data_dir / zip_file.stem
|
||||||
if member.filename.startswith(zip_file.stem + '/'):
|
|
||||||
# 文件路径包含 zip 文件名前缀
|
# 如果 member.filename 以 zip_file.stem/开头,需要先去掉这个前缀
|
||||||
member_path = base_extract_path / member.filename[len(zip_file.stem) + 1:]
|
if member.filename.startswith(zip_file.stem + '/') or member.filename.startswith(zip_file.stem + os.sep):
|
||||||
elif member.filename.startswith(zip_file.stem):
|
relative_path = member.filename[len(zip_file.stem) + 1:]
|
||||||
# 文件路径直接以 zip 文件名开头
|
member_path = base_extract_path / relative_path
|
||||||
member_path = base_extract_path / member.filename[len(zip_file.stem):].lstrip('/')
|
|
||||||
else:
|
else:
|
||||||
# 文件路径不包含前缀
|
# 否则直接在 base_extract_path 下查找
|
||||||
member_path = base_extract_path / member.filename
|
member_path = data_dir / member.filename
|
||||||
|
IsdirectorExtracted = True
|
||||||
|
|
||||||
# 如果路径存在,设置时间戳
|
# 如果路径存在,设置时间戳
|
||||||
if member_path.exists():
|
if member_path.exists():
|
||||||
@@ -479,6 +478,8 @@ def main():
|
|||||||
os.utime(member_path, (timestamp, timestamp))
|
os.utime(member_path, (timestamp, timestamp))
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
if IsdirectorExtracted:
|
||||||
|
extract_dir = data_dir
|
||||||
|
|
||||||
# 检查是否多了一层目录
|
# 检查是否多了一层目录
|
||||||
inner_dir = extract_dir / zip_file.stem
|
inner_dir = extract_dir / zip_file.stem
|
||||||
@@ -511,6 +512,14 @@ def main():
|
|||||||
|
|
||||||
if not twole_folder.exists() or not zxxk_folder.exists():
|
if not twole_folder.exists() or not zxxk_folder.exists():
|
||||||
print("❌ 文件夹不存在,请先解压文件")
|
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
|
fail_count += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user