为自定义 ChatGPT 知识库合并 Python 文件:分步指南

在 AI 与机器学习快速发展的世界里,个性化并扩展 ChatGPT 这类模型能力的重要性日益提升。一种有用的方法是准备一个自定义知识库,帮助模型回答特定领域、项目或代码库相关的问题。

为此,我们需要一种实用方式,将 Python 代码仓库转换成可读的文本格式。下面的指南展示了如何把某个目录中的 Python 文件合并为文本文件,以便检查、归档,或作为自定义知识库的一部分上传。

背景

假设你有一个包含大量 Python 脚本的仓库,每个脚本都包含有价值的代码、注释和项目特定上下文。你希望保留这种结构,同时让内容在原始仓库之外也更容易阅读。

挑战在于:将代码库转换为纯文本,同时不丢失源文件路径。保留原始路径很重要,因为它能让你把每段代码片段追溯回项目中的具体位置。

解决方案

下面的脚本会遍历源目录,查找 Python 文件,并将每个目录中的文件合并到对应的 .txt 文件中。输出中的每个部分都以原始文件路径开头,后面跟着文件内容。

这样可以得到一种简单的导出格式,既便于审阅,也便于在项目较大时按目录拆分。

工作原理

  1. 遍历目录:脚本使用 os.walk 遍历指定的源目录,并识别扩展名为 .py 的 Python 文件。
  2. 合并文件:它会把每个子目录中找到的所有 Python 文件合并成一个文本文件,并包含每个原始文件的路径作为参考。
  3. 组织输出:合并后的文件会根据其在源目录中的相对路径命名,从而让输出保持结构清晰、易于理解。
  4. 保持灵活:你可以指定任意源目录和目标目录,使该脚本能够在不同项目中复用。

代码

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}nn")
                    with open(file_path, "r") as infile:
                        outfile.write(infile.read())
                        outfile.write("nn")


# Example usage
source_directory = 'diffraction'
target_directory = 'merged_py_files'
merge_py_files_by_directory(source_directory, target_directory)

几项实用检查

在将输出作为知识源使用之前,值得快速做几项检查:

  • 确认 source_directory 指向你真正想要导出的项目文件夹。
  • 确认 target_directory 位于源代码树之外,这样生成的 .txt 文件之后就不会被意外再次处理。
  • 打开一两个生成的文件,检查文件路径和代码块是否易读。
  • 如果仓库中包含机密信息、凭据、API 密钥或私有配置,请先删除它们,再将文本上传到任何地方。

对于较大的项目,你可能还需要跳过虚拟环境、缓存、构建输出或依赖目录。可以为脚本扩展一个忽略列表,用于排除 .venv__pycache__builddist 等文件夹。

结论

这种方法提供了一种简洁的方式,可将 Python 代码仓库转换为适合审阅或用于自定义知识库的纯文本格式。通过保留文件路径并按目录对文件分组,导出的文本会比一个庞大且未区分结构的转储更容易浏览。

对于中小型项目,这个简单脚本通常已经足够。对于更大或更敏感的仓库,请在使用生成文件之前加入过滤、编码处理和机密信息检查。

Leave a Reply