首页 > 其他分享 >代码项目转换成markdown文件

代码项目转换成markdown文件

时间:2022-11-16 22:55:50浏览次数:31  
标签:转换成 markdown index 代码 re del file path dir

D:\code_gitee\python_code2md_gitee\code2md\main.py

import os
import re
import shutil

import easygui
from easygui import *

from pathlib import Path


class User(EgStore):
    def __init__(self, filename):
        self.path = ''
        EgStore.__init__(self, filename)


def get_dir_path_gui():
    # 创建存储对象
    user = User("settings.txt")
    # 取出以前保存的文件
    user.restore()
    file_path = easygui.diropenbox(default=user.path)
    user.path = file_path
    user.store()
    return file_path


def get_root_dir(dir_path):
    file_list = os.listdir(dir_path)
    path_list = []
    root_file_list = []
    for file in file_list:
        print(file)
        # 过滤隐藏文件
        if file.startswith('.'):
            continue
        # 过滤所有的文件
        is_file = re.findall(r'\.[^.\\/:*?"<>|\r\n]+$', file)
        if len(is_file):
            # 反向过滤,后缀文件
            res_abort = re.findall(re.compile(r'(\.json|d\.ts|config\.ts|config\.js)$'), file)
            if res_abort:
                continue
            # 保留根文件夹的(\.py|vue|js|ts)$ 结尾的文件
            res_save = re.findall(re.compile(r'(\.py|vue|js|ts|html)$'), file)
            if len(res_save):
                root_file_list.append(file)
            continue
        # 过滤node_modules
        res_abort = re.findall(re.compile(r'(__pycache__|venv|build|dist|node_modules|public|LICENSE)'), file)
        if len(res_abort):
            continue
        # 拼接成路径
        file_path = os.path.join(dir_path, file)
        path_list.append(file_path)
    return path_list, root_file_list



def get_deep_dirs(path):
    file_path = []
    for root, dirs, files in os.walk(path):

        # 过滤不符合的文件夹------------------------------------------------------------------------
        del_dir_index = []
        for i, dir in enumerate(dirs):
            # 过滤隐藏文件
            if dir.startswith('.'):
                del_dir_index.append(i)
            # 过滤掉所有不符合的文件夹
            res_abort = re.findall(re.compile(r'(__pycache__|venv|build|dist|node_modules|public|LICENSE|assets)'), dir)
            if len(res_abort):
                del_dir_index.append(i)

        # 去重,排序,过滤文件夹
        del_dir_index = list(set(del_dir_index))
        del_dir_index.sort()
        for counter, index in enumerate(del_dir_index):
            index = index - counter
            dirs.pop(index)

        # 过滤不符合的文件-----------------------------------------------------------------------------
        del_file_index = []
        for i, file in enumerate(files):
            # 过滤隐藏文件
            # (\.gitignore)|(\.prettierrc)
            if file.startswith('.'):
                del_file_index.append(i)
            # 过滤掉所有不符合的文件
            res_abort = re.findall(re.compile(
                r'(\.json|\.d\.ts|\.lock|\.config\.ts|\.config\.js|\.png|\.woff2|\.ttf|\.woff|\.css|README\.md|\.toml)$'),
                                   file)
            if len(res_abort):
                del_file_index.append(i)

        # 去重排序,过滤文件
        del_file_index = list(set(del_file_index))
        del_file_index.sort()
        for counter, index in enumerate(del_file_index):
            index = index - counter
            files.pop(index)

        # 筛选所有符合后缀的文件------------------------------------------------------------------------
        for file in files:
            # 正向过滤含有(\.py|vue|js|ts)$ 结尾的文件
            res_save = re.findall(re.compile(r'(\.py|vue|js|ts|html)$'), file)
            if len(res_save):
                file_path.append(os.path.join(root, file))
    return file_path




def readcode_writemd(file_path, root_path):
    suffix = re.findall(r'\.[^.\\/:*?"<>|\r\n]+$', file_path)
    if len(suffix):
        suffix = suffix[0][1:]
    with open(file_path, "r", encoding='utf-8') as f:  # 打开文件
        head_line = f.readline()
        rest_line = f.read()
        write2md(head_line, head_line + rest_line, suffix, file_path, root_path)




def write2md(head, content, suffix, file_path, root_path):
    with open(root_path + '/NOTE.md', "a", encoding='utf-8') as f:  # 打开文件
        f.write(f"# `{file_path}`\n\n")
        # f.write(f"# {head}\n\n")
        f.write(f"```{suffix}\n")
        f.write(content)
        f.write(f"```\n")


 


if __name__ == '__main__':
    root_path = get_dir_path_gui()
    md_file = os.path.join(root_path, 'NOTE.md')

    # 清楚上一次的文件
    if os.path.exists(md_file):
        os.remove(md_file)

    file_path_list = get_deep_dirs(root_path)
    for file_path in file_path_list:
        print(file_path)
        readcode_writemd(file_path, root_path)
    print('!!!complete!!!')

标签:转换成,markdown,index,代码,re,del,file,path,dir
From: https://www.cnblogs.com/zhuoss/p/16897849.html

相关文章

  • 《代码大全2》——读后感3
    本次读后感写于阅读完《代码大全2》第四章。一、关键的”构建“决策1.选择编程语言 二、编程约定    三、认清你在技术浪潮中的位置    四、选择主......
  • markdown的学习
    标题二级标题“#”号后面需要空格才能成功三级标题四级标题字体样式美化字体美化字体美化字体美化字体列表abcabc阿苏勒拥有青铜之血,实在是太NB了......
  • socket 客户端服务端代码优化
    #服务端:importsocketserver=socket.socket()server.bind(('127.0.0.1',8081))server.listen(5)whileTrue:sock,addr=server.accept()whileTrue......
  • Markdown学习
     标题:三级标题四级标题 字体Hello,World!Hello,World!Hello,World!Hello,World!  引用 走向人生巅峰 分割线  图片     超......
  • 代码随想录算法训练营Day01|704. 二分查找、27. 移除元素
    代码随想录算法训练营Day01|704.二分查找、27.移除元素704.二分查找题目链接:704.二分查找首先注意题干的描述:题干描述说明了元素是升序排列的,否则需要调用sort进行......
  • 传输层之TCP与UDP协议、应用层、socket模块、socket代码简介、半连接池的概念
    传输层之TCP与UDP协议TCP与UDP都是用来规定通信方式的 通信的时候可以随心所欲的聊也可以遵循一些协议符合要求的聊 随性所欲的聊:文字图片视频小油腻话你侬我侬......
  • OSI传输层TCP与UDP协议、应用层简介、socket模块介绍及代码优化、半连接池的概念
    目录传输层之TCP与UDP协议应用层socket模块socket基本使用代码优化半连接池的概念传输层之TCP与UDP协议TCP与UDP都是用来规定通信方式的通信的时候可以随心所欲的聊......
  • 代码实操
    添加注册功能importjavax.naming.OperationNotSupportedException;importjava.util.ArrayList;importjava.util.Scanner;publicclassuseTest{publicsta......
  • 复制CSDN代码的方式
    CSDN最近这个必须登录才能复制大伙开源的代码 (我不知道要不要付费  ) 我感觉多此一举非常不地道。 切回正题,这篇博客就是说一下我复制CSDN代码的方法首先  这......
  • AIRIOT物联网低代码平台如何配置交通部JT-808协议?
    属性配置可配置终端ID和SIM卡号,数据点配置决定设备传上来的哪些数据可以存储展示。驱动配置可配置采集周期和通讯超时时间。AIRIOT物联网低代码平台如何配置交通部J......