在 AI 和机器学习迅速发展的背景下,让 ChatGPT 读懂特定项目、特定领域的代码变得越来越有价值。一个直接的办法是把代码仓库整理成模型容易检索和理解的文本材料,再作为自定义知识库或项目资料上传。
本文提供一个简单的 Python 脚本,用来把目录中的 Python 文件按子目录合并为文本文件。这样既能保留代码来源路径,又能减少零散文件带来的整理成本。
Table of Contents
背景
设想你有一个充满 Python 脚本的代码库,每个脚本都包含有价值的代码片段和项目知识。你希望利用这个代码库来增强 ChatGPT 对项目结构、业务逻辑或特定领域实现方式的理解。
挑战在于:直接上传大量零散文件往往不方便,也不利于模型快速把代码和路径对应起来。因此,我们需要把代码库转换成更清晰、更容易摄取的文本格式。
解决方案
下面的脚本会遍历指定目录,把每个子目录中的 .py 文件合并成一个 .txt 文件,并在合并内容中写入原始文件路径。输出文件会按照源目录中的相对路径命名,方便之后定位和引用。
这种方法适合用于:
- 准备 ChatGPT 项目知识库材料;
- 给代码审查或重构任务提供上下文;
- 快速生成可搜索、可归档的代码快照;
- 在不改变原项目结构的前提下整理代码资料。
它是如何工作的
- 遍历目录:脚本使用
os.walk导航指定的源目录,识别扩展名为.py的 Python 文件。 - 合并文件:它会把同一个子目录中找到的所有 Python 文件合并为一个文本文件,并在每段代码前写入原始文件路径。
- 组织输出:合并后的文件根据源目录中的相对路径命名,使输出结构仍然可读。
- 保持灵活:你可以指定任意源目录和目标目录,因此它可以用于不同项目。
代码
import os
def merge_py_files_by_directory(source_directory, target_directory):
for subdir, dirs, files in os.walk(source_directory):
py_files = [f for f in files if f.endswith('.py')]
if py_files:
relative_path = os.path.relpath(subdir, start=source_directory)
new_filename = relative_path.replace(os.sep, '_') + '.txt'
target_file_path = os.path.join(target_directory, new_filename)
os.makedirs(target_directory, exist_ok=True)
with open(target_file_path, "w") as outfile:
for file in py_files:
file_path = os.path.join(subdir, file)
outfile.write(f"{'=' * 20}\n")
outfile.write(f"File: {file_path}\n")
outfile.write(f"{'=' * 20}\n\n")
with open(file_path, "r") as infile:
outfile.write(infile.read())
outfile.write("\n\n")
# 示例用法
source_directory = 'diffraction'
target_directory = 'merged_py_files'
merge_py_files_by_directory(source_directory, target_directory)
使用建议
运行前,先确认 source_directory 指向你要整理的项目目录,target_directory 指向你希望保存输出文本的目录。例如:
python merge_python_files.py
生成结果后,可以先抽查几个输出文件,确认:
- 文件路径是否正确保留;
- 代码内容是否完整;
- 输出目录中是否包含了预期的子目录内容;
- 是否需要排除虚拟环境、缓存目录或第三方依赖代码。
如果项目比较大,建议在脚本中额外排除 .venv、venv、__pycache__、site-packages 等目录,避免把无关依赖打包进知识库。
结论
这种方法为将 Python 代码库转换成适合 ChatGPT 读取的知识库材料提供了一条简洁路径。它不会修改原始代码,只是生成结构化的文本副本,适合用于项目理解、代码问答、重构准备和技术文档整理。
