fixed some bugs

This commit is contained in:
2026-04-23 21:06:36 +08:00
parent 929d169431
commit 7f61a585be
5 changed files with 2066 additions and 0 deletions

183
server/backup_files.py Normal file
View File

@@ -0,0 +1,183 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
根据 compressed_group_time_issues.json 的信息,将文件备份到 bak 目录
"""
import json
import shutil
from pathlib import Path
# 配置路径
JSON_FILE_PATH = 'server/jsons/2.json'
CC_DIR = Path('cc')
BAK_DIR = Path('bak')
def find_subfolder(base_dir: Path, folder_name: str) -> Path | None:
"""
在 base_dir 下查找名为 folder_name 的子文件夹
"""
target = base_dir / folder_name
if target.exists() and target.is_dir():
return target
return None
def find_21cnjy_folder(base_dir: Path) -> Path | None:
"""
查找二一教育21 世纪教育网)文件夹
参照 association_detail.py 第 733-738 行的逻辑
"""
candidates = [
"21世纪教育网",
"二一教育",
"21世纪教育",
"二一世纪教育"
]
for candidate in candidates:
folder = base_dir / candidate
if folder.exists() and folder.is_dir():
return folder
return None
def find_zxxk_folder(base_dir: Path) -> Path | None:
"""
查找学科网文件夹
"""
return base_dir / "学科网"
def copy_file_with_path(src_file: Path, dst_dir: Path) -> None:
"""
复制文件及其 2 级路径source_folder 和 二一教育/学科网)到目标目录
"""
if not src_file.exists():
return
source_folder_name = src_file.parent.parent.name
platform_folder_name = src_file.parent.name
# 构建目标路径bak/source_folder/platform_folder/
dst_file = dst_dir / source_folder_name / platform_folder_name / src_file.name
# 创建目标目录
dst_file.parent.mkdir(parents=True, exist_ok=True)
# 复制文件
shutil.copy2(str(src_file), str(dst_file))
def process_record(record: dict, cc_dir: Path, bak_dir: Path) -> dict:
"""
处理一条记录,返回处理结果
"""
result = {
'row_index': record.get('row_index'),
'source_folder': record.get('source_folder'),
'group1_copied': False,
'group2_copied': False,
'group1_file': None,
'group2_file': None,
'error': None
}
source_folder_name = record.get('source_folder')
if not source_folder_name:
result['error'] = 'Missing source_folder'
return result
# 在 cc 目录下查找 source_folder
source_dir = find_subfolder(cc_dir, source_folder_name)
if not source_dir:
result['error'] = f'Source folder not found: {source_folder_name}'
return result
# 查找二一教育和学科网文件夹
group1_folder = find_21cnjy_folder(source_dir)
group2_folder = find_zxxk_folder(source_dir)
if not group2_folder:
result['error'] = f'学科网 folder not found in {source_folder_name}'
return result
if not group1_folder:
result['error'] = f'二一教育 folder not found in {source_folder_name}'
return result
# 获取 group1 和 group2 的第一个文件zip 文件)
group1_files = record.get('group1', {}).get('files', [])
group2_files = record.get('group2', {}).get('files', [])
if not group1_files or not group2_files:
result['error'] = 'Missing files in group1 or group2'
return result
group1_zip_name = group1_files[0].get('name')
group2_zip_name = group2_files[0].get('name')
# 构建源文件路径
group1_src_file = group1_folder / group1_zip_name
group2_src_file = group2_folder / group2_zip_name
# 复制 group1 文件(二一教育)
if group1_src_file.exists():
copy_file_with_path(group1_src_file, bak_dir)
result['group1_copied'] = True
result['group1_file'] = group1_zip_name
else:
result['error'] = f'Group1 file not found: {group1_src_file}'
return result
# 复制 group2 文件(学科网)
if group2_src_file.exists():
copy_file_with_path(group2_src_file, bak_dir)
result['group2_copied'] = True
result['group2_file'] = group2_zip_name
else:
result['error'] = f'Group2 file not found: {group2_src_file}'
return result
return result
def main():
"""主函数"""
print("=" * 60)
print("开始备份文件到 bak 目录")
print("=" * 60)
# 加载 JSON 数据
with open(JSON_FILE_PATH, 'r', encoding='utf-8') as f:
data = json.load(f)
print(f"{len(data)} 条记录需要处理\n")
success_count = 0
fail_count = 0
for record in data:
row_index = record.get('row_index', 'unknown')
source_folder = record.get('source_folder', 'unknown')
result = process_record(record, CC_DIR, BAK_DIR)
if result['group1_copied'] and result['group2_copied']:
success_count += 1
print(f"✓ [{row_index}] {source_folder}")
print(f" 二一教育:{result['group1_file']}")
print(f" 学科网:{result['group2_file']}")
else:
fail_count += 1
print(f"✗ [{row_index}] {source_folder}")
print(f" 错误:{result['error']}")
print("\n" + "=" * 60)
print(f"备份完成!成功:{success_count} 条,失败:{fail_count}")
print("=" * 60)
if __name__ == '__main__':
main()