把项目转换为md知识库,提供给gpts使用

把项目转换为md知识库,提供给gpts使用

import osimport chardetproject_path='' # 项目目录路径
project_name='' # 项目名称# 定义全局字典,映射文件后缀名到Markdown代码块的语言
language_mapping = {'.java': 'java','.py': 'python','.js': 'javascript','.html': 'html','.md': 'markdown','.properties': 'properties','.xml': 'xml','.vue': 'vue','.tsx': 'tsx','.yml': 'yaml','.sql': 'sql','.json': 'json','.txt': 'text','.csv': 'csv','.ini': 'ini','.c': 'c','.cpp': 'cpp','.go': 'go','.php': 'php','.rb': 'ruby',
}def detect_encoding(file_path):"""检测文件编码"""with open(file_path, 'rb') as file:raw_data = file.read()result = chardet.detect(raw_data)return result['encoding']def write_file_content_to_utf8(file_path, output_file):"""读取文件并以UTF-8编码写入到txt文件中"""# 获取文件后缀名_, ext = os.path.splitext(file_path)# 检查文件大小(20KB = 20480 字节)# if os.path.getsize(file_path) > 91136 and ext != '.md':if os.path.getsize(file_path) > 91136:print(f"忽略大文件:{file_path}")returnencoding = detect_encoding(file_path)try:with open(file_path, 'r', encoding=encoding) as file:content = file.read()relative_path = os.path.relpath(file_path, project_path)  # 计算相对路径output_file.write(f"## 文件:{project_name}\\{relative_path}\n\n")  # Markdown标题if not ext == '.md':# 根据文件后缀名确定代码块的语言language = language_mapping.get(ext, 'text')  # 默认为'text'output_file.write(f"```{language}\n")  # 语法高亮output_file.write(content)if not ext == '.md':output_file.write("\n```\n\n")  # 结束代码块else:output_file.write("\n\n")  # 结束代码块except UnicodeDecodeError:print(f"读取失败(编码不支持):{file_path}")def should_ignore(directory,ignored_directories):"""检查是否应该忽略给定的目录"""for ignored_dir in ignored_directories:if ignored_dir in directory:return Truereturn Falsedef process_directory(directory, output_file,ignored_directories):"""递归处理目录下的所有文件和子目录"""if should_ignore(directory,ignored_directories):return  # 忽略整个目录for item in os.listdir(directory):path = os.path.join(directory, item)if os.path.isdir(path):process_directory(path, output_file,ignored_directories)elif any(path.endswith(suffix) for suffix in file_suffixes):print('path===============',path)write_file_content_to_utf8(path, output_file)def create_knowledge_base(project_directory, output_path):"""创建知识库文件"""with open(output_path, 'w', encoding='utf-8') as output_file:process_directory(project_directory, output_file,ignored_directories)def create_knowledge_base(paths, output_path):"""创建知识库文件"""global project_path,project_namewith open(output_path, 'w', encoding='utf-8', errors='ignore') as output_file:for project_directory in paths:project_path=project_directoryproject_name = os.path.basename(project_path)  # 提取项目名称output_file.write(f"# 项目:{project_name}\n\n")  # Markdown标题process_directory(project_directory, output_file,ignored_directories)if __name__ == '__main__':ignored_directories = ['target','.idea','node_modules','build','dist','out','logs','log','lib','js_sdk','uni_modules','nativeplugins','static','public']file_suffixes=['.java', '.properties', '.yml', '.md', '.txt','.js','.html','.vue','.xml','.json','.sql','.csv','.py','.tsx','.ts','.less','.scss','.gradle']project_dirs = ['H:\\下载\edge浏览器下载\\spring-security-6.1.6',]output_path = 'spring-security-6.1.6.md' # 知识库文件的输出路径create_knowledge_base(project_dirs, output_path)

detect_encoding(file_path): 检测并返回文件的编码类型。
write_file_content_to_utf8(file_path, output_file): 读取文件内容,根据文件扩展名决定是否加上 Markdown 代码块的格式,并写入到指定的输出文件中。
should_ignore(directory, ignored_directories): 判断给定的目录是否应该被忽略。
process_directory(directory, output_file, ignored_directories): 递归处理给定目录下的所有文件和子目录,转换为 Markdown 格式。
create_knowledge_base(paths, output_path): 遍历给定的项目目录列表,为每个项目创建 Markdown 格式的知识库文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

polar CTF CB链

一、题目 二、解答 1、通过jar包,可以看到/user路由下有反序列化操作 看到存在commons-beanutils依赖且版本为1.9.2,可利用CB链Getshell。 使用ysoserial项目中的CommonsBeanutils1链写一个POC,注意确保ysoserial项目中的pom.xml中的comm…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第一天-socket编程(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式培训笔记,嵌入式硬件,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机领域.https://blog.csdn.net/weixin_3980490…

8.1 Centos安装部署Redis

文章目录 前言一、下载Redis二、编译Redis三、配置redis.conf四、启动Redis服务端五、启动Redis客户端测试前言 本文将手把手演示在CentOS7上安装部署Redis。 一、下载Redis 可以使用wget命令进行下载,这里下载到/app目录 wget http://download.redis.io/releases/redis-5.…

Codeforces Round 908 (Div. 2) C. Anonymous Informant (思维题)

题目链接 思路: 考虑到 k 的范围很大, 肯定不能进行模拟。 通过观察以及题目的条件, a[i] i 时是定点, 并循环左移 i 次, 则左移后, 数组的最后一位即为该定点, 且通过这个定点可以知道此定点未左移时, 数组的第一个数是什么, 也就可以知道当时数组的最后一个数是什么, 即又找…

webserver面试

1 难点 1.1 网络框架的选取 常见的有reactor和proactor,在linux中,异步io不完善,所以很多项目都采用reactor模式。我又参考了开源的项目,最终选择使用同步io模拟异步的模式。 1.2 RAII 参考开源项目,资源获取即初始化&#xf…

Centos安装Datax

Centos7安装DataX 一、DataX简介二、DataX的数据源支持三、安装DataX1、下载DataX2、解压3、检验是否安装成功4、使用 四、实践案例1、环境信息2、编写同步的配置文件(user_info.json)3、执行同步4、验证同步结果 一、DataX简介 DataX 是阿里云 DataWorks数据集成 的开源版本&a…

【Unity】空引用处理方法总结

在 Unity 中,空处理(Null Handling)指的是在处理对象引用时,考虑到可能为空(null)的情况,并采取适当的措施来避免潜在的错误或异常。下面是一些处理空引用的常见方法: 空引用检查&am…

RocketMQ源码阅读-Message消息存储

RocketMQ源码阅读-Message消息存储 1. CommitLog的作用2. CommitLog 存储消息3. 时序图4. 小结 在Broker消息接收一篇中,分析到Broker接收到消息,最终会调用CommitLong#putMessage方法存储消息。 本篇来分析CommitLong#putMessage存储消息的流程。 1. C…

自编C++题目——战争

预估难度 困难 题目描述 国与国以河为界,有一天他们两国发生了战争,在边疆的战士开始了厮杀。小明是一个参谋,他也知道两国的兵都能打个人,所以他想让你帮忙安排布置兵,以击杀所有国的兵。 打仗规则 只能打在同一…

Java-集合-FAQ-List/Set/Map区别

1 需求 2 接口 3 示例 4 参考资料 JAVA学习-List&#xff0c;Set&#xff0c;Map三者的区别_list<list<integer>>和map区别-CSDN博客 Java集合-HashSet的使用及与LinkedHashSet、TreeSet的对比_linkedhashset和treeset的区别-CSDN博客 java中Map有哪些实现类_ma…

鸿蒙应用开发尝鲜:初识HarmonyOS

初识HarmonyOS 来源:华为官方网站 : https://developer.huawei.com/ 相信大家对鸿蒙应用开发也不在陌生,很多身处互联网行业或者不了解的人们现在也一定都听说过华为鸿蒙.这里我将不再说废话,直接步入正题 鸿蒙应用开发语言 HarmonyOS应用开发采用的是ArkTS语言,ArkTS是在Typ…

高校站群内容管理系统开发语言各有优势

站群管理系统开发可以选择多种编程语言&#xff0c;具体选择哪种语言最好需要考虑多个因素&#xff0c;包括开发团队的技术栈、项目需求、性能要求、安全性等。下面列举一些常见的编程语言及其适用场景&#xff1a; PHP&#xff1a;PHP是一种广泛使用的服务器端脚本语言&#…

数据结构:堆和堆排序

数据结构&#xff1a;堆和堆排序 文章目录 数据结构&#xff1a;堆和堆排序1.二叉树的存储结构1.顺序结构2.链式结构 2.堆3.堆的实现4.堆排序&#xff08;选择排序中的一类&#xff09;1. 基本思想2.代码实现 1.二叉树的存储结构 1.顺序结构 顺序结构存储就是使用数组来表示一…

【数据结构 | 直接插入排序】

直接插入排序 基本思路直接插入排序SelectSort 基本思路 扑克牌是我们几乎每个人都可能玩过的游戏最基本的扑克玩法都是—边模牌,— 边理牌。加入我们拿到如图这样的扑克牌&#xff1a; 我们会按照如下理牌&#xff1a; 将3和4移动至5的左侧&#xff0c;再将2移动到最左侧&a…

按键开关机的锂电池充放电解决方案

一、产品概述 TP4562 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理SOC&#xff0c;为锂电池的充放电提供完整的单芯片电源解决方案。 TP4562 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块、…

使用Spark操作Hudi表详细教程

Hudi Spark使用 本篇为大家带来通过Spark shell和Spark SQL操作Hudi表的方式。 Hudi表还可以通过Spark ThriftServer操作。 软件准备 Scala 2.12Flink 1.15Spark 3.3Hudi 0.13.1 Hudi编译的时候会遇到依赖下载缓慢的情况。需要换用国内源。修改settings.xml文件&#xff0c…

java常见面试题:如何使用Java进行性能调优和内存优化?

Java性能调优和内存优化是一个涉及多个方面的复杂主题。以下是一些建议和步骤&#xff0c;可以帮助你提高Java应用程序的性能和内存效率&#xff1a; 性能分析&#xff1a; 使用性能分析工具&#xff08;如VisualVM, JProfiler, YourKit等&#xff09;来监控和分析应用程序的运…

Pandas实战100例 | 案例 44: 添加新列

案例 44: 添加新列 知识点讲解 在数据分析过程中&#xff0c;经常需要基于现有数据计算新的数据列。Pandas 允许你轻松地向 DataFrame 添加新列&#xff0c;并基于现有列进行计算。 添加新列: 直接通过赋值的方式可以向 DataFrame 添加新列。新列的值可以是基于现有列的计算…

[NSSCTF Round#16 Basic]RCE但是没有完全RCE

[NSSCTF Round#16 Basic]RCE但是没有完全RCE 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[md…

【KaTeX】math mode字体、特殊符号

★☆✦✧ ⋆ ★ ✶✪⟡⟢⟣⟠⋄ ∗ ✽⭒⭑ ★☆✦✧ \star\bigstar ✶✪ ⟡⟢⟣⟠⋄∗✽⭒⭑ ★☆✦✧⋆★✶✪⟡⟢⟣⟠⋄∗✽⭒⭑ ☿♀♁♂⚢⚣⚥⚦⚧⚨⚩⚭⚮⚯⧪⧬⧭⧳⧲⧱⧰⧯⧮ ☿♀♁♂ ⚢⚣⚥⚦⚧⚨⚩⚭⚮⚯⧪⧬⧭⧳⧲⧱⧰⧯⧮ ☿♀♁♂⚢⚣⚥⚦⚧⚨⚩⚭⚮⚯⧪⧬⧭⧳⧲…