✅ 功能:
- 合并多个源码/配置文件为一个
.txt
。
- 将所有原始文件(保留从
D:\Android\project
开始的相对路径结构)压缩为 .zip
。
- 同时将生成的合并文本文件也一并加入压缩包中(只保留其文件名)。
✅ 最终完整脚本:含相对路径与合并输出文件打包
import os
from datetime import datetime
import zipfile
# 要合并和压缩的文件路径列表
file_paths = [
r"D:\Android\project\WebPlayerTV\app\src\main\java\com\example\webplayertv\CardPresenter.kt",
r"D:\Android\project\WebPlayerTV\app\src\main\java\com\example\webplayertv\Channel.kt",
r"D:\Android\project\WebPlayerTV\app\src\main\java\com\example\webplayertv\MainActivity.kt",
r"D:\Android\project\WebPlayerTV\app\src\main\java\com\example\webplayertv\MainFragment.kt",
r"D:\Android\project\WebPlayerTV\app\src\main\java\com\example\webplayertv\PlaybackActivity.kt",
r"D:\Android\project\WebPlayerTV\app\src\main\java\com\example\webplayertv\PlaybackVideoFragment.kt",
r"D:\Android\project\WebPlayerTV\app\src\main\AndroidManifest.xml",
r"D:\Android\project\WebPlayerTV\app\src\main\res\layout\fragment_player.xml",
r"D:\Android\project\WebPlayerTV\app\build.gradle.kts",
r"D:\Android\project\WebPlayerTV\settings.gradle.kts"
]
# 项目根路径(用于保留相对路径结构)
project_root = r"D:\Android\project"
# 时间戳
timestamp = datetime.now().strftime("%y-%m-%d-%H-%M-%S")
# 合并输出文件路径(.txt)
output_path_txt = fr".\webplayertv_merged_output_{timestamp}.txt"
# 压缩输出文件路径(.zip)
output_path_zip = fr".\webplayertv_merged_output_{timestamp}.zip"
# 合并逻辑
with open(output_path_txt, 'w', encoding='utf-8') as outfile:
for path in file_paths:
outfile.write(f"\n\n==================== {path} ====================\n\n")
try:
with open(path, 'r', encoding='utf-8') as infile:
outfile.write(infile.read())
except Exception as e:
outfile.write(f"<< 无法读取文件: {e} >>\n")
print(f"文件已合并保存到: {output_path_txt}")
# 压缩逻辑(保留从 project_root 开始的相对路径结构 + 添加合并输出文件)
with zipfile.ZipFile(output_path_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
for file in file_paths:
if os.path.exists(file):
arcname = os.path.relpath(file, start=project_root)
zipf.write(file, arcname=arcname)
else:
print(f"跳过不存在的文件: {file}")
# 添加合并生成的文本文件(只保留文件名)
zipf.write(output_path_txt, arcname=os.path.basename(output_path_txt))
print(f"文件已压缩保存到: {output_path_zip}")
📦 示例 .zip
文件内容结构:
WebPlayerTV/app/src/main/java/com/example/webplayertv/CardPresenter.kt
WebPlayerTV/app/src/main/java/com/example/webplayertv/...
WebPlayerTV/app/src/main/AndroidManifest.xml
WebPlayerTV/app/build.gradle.kts
WebPlayerTV/settings.gradle.kts
webplayertv_merged_output_25-08-08-14-22-00.txt <-- 这个是合并文件(无路径)