Code Copy代码拷贝进一个文件工具(毕设/软著用

37 篇文章 2 订阅
订阅专栏
这篇博客分享了一种使用Python脚本将大量代码从文件夹批量导出到Word文档的方法,作者遇到在Mac上运行警告以及代码结构显示问题。脚本允许用户自定义文件名前缀、是否保留空行等选项,并提供了代码实现。
摘要由CSDN通过智能技术生成

前言

交毕设居然要求要把代码拷贝到word文档上???
什么神奇操作,而我的毕设代码量似乎六七千行,这不得累死…
还是写个脚本吧,说干就干!

本来计划很美好,结果执行起来后写出却是阉割版…
(treeview监听事件后不知道怎么只让子类处理…菜鸡菜鸡,要是像vue那么方便就好了, messagebox居然在mac上老是warning…)

该脚本只需要python环境即可,安装的见我另一篇博文 Python环境配置与入门建议(面向新手文)



界面


选了一个文件夹当例子

导出后:

by the way, 若你想保留缩进的话,可以做以下更改(只是我自己有些代码层数多,缩进多了之后行的空间不太够,所以直接就去掉缩进了)



拷贝到word后,只需要搜索 【代码文件】就能找到每一个拷贝的文件名了,然后就可以设置一下 标题,我想了想,还是要把这个选择留给用户去做,因为我不太清楚你想把这个文件定义为第几级标题。

宽度不够中间那一条线可用鼠标拖动过去



用户自定义区



代码

"""
Author: Andy Dennis
Date: 2022.5.14, SAT
Last Alter Time: 16:36, 2022.5.14
"""
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
import os
import tkinter.font as tf
from threading import Thread


# ---> 自定义区 start, 供用户自定义修改
file_decoration_prefix = '代码文件'    # 文件名前缀
count_lines_with_null_string = False  # 计算代码行数时是否考虑空行
put_null_string_to_txt = False        # 是否把空行也复制进文档
# 不参与计算的文件类型
ignore_file_type = ['pt',
                    'png', 'jpg', 'jpeg', 'pdf', 'ico',
                    'doc', 'docx', 'ppt', 'pptx', 'csv', 'xls', 'xlsx']
# 代码注释样式, {}代表注释内容, 默认 //, 该注释会放在文件开头,作为文件开始的标识
annotation_map = {'html': '<!-- {} -->',
                  'css': '/* {} */',
                  'py': '# {}',
                  'vue': '<!-- {} -->'}
# 忽略的文件
ignore_name_lt = ['.DS_Store', '__pycache__']
# <--- 自定义区 end

# 全局变量
dir_path = ''                   # 工作目录
code_lt = []
code_file_nums = 0
code_file_lines = 0


# txt文本读取出来后,返回列表
def read_txt_lines(fp_):
    # print('!!! ', fp_)
    with open(fp_, "r", encoding='utf-8') as f:  # 打开文件
        data = f.readlines()
    data = [item.strip() for item in data]
    return data


# 列表转txt文本
def write_lt2txt(lt, fp_):
    lt = [i + '\n' for i in lt]
    with open(fp_, 'w', encoding='utf-8') as f:
        f.writelines(lt)
    print('写入到 {} 文件成功'.format(fp_))


def insert_item(tree_root, tree_p, path_p):
    """
    递归在树状目录中插入显示文件结构, 深度优先
    tree_root: 树状表格根节点, 
    tree_p: 父类根节点,
    path_p: 目录名字
    """
    dir_lt = os.listdir(path_p)
    for item_index, item_name in enumerate(dir_lt):
        if item_name in ignore_name_lt:   # 跳过一些文件
            continue

        item_path = '{}/{}'.format(path_p, item_name)
        if os.path.isdir(item_path):
            tree_new = tree_root.insert(
                tree_p, item_index, text="{}".format(item_name))
            insert_item(tree_root, tree_new, item_path)
        else:
            tree_new = tree_root.insert(
                tree_p, item_index, text="{}".format(item_name))


# 清空树状目录
def clearTreeView(tree_node):
    x = tree_node.get_children()
    for item in x:
        tree_node.delete(item)


def copy_file_recurrent(abs_path_p, path_p):
    """
    递归拷贝文件代码, 深度优先
    tree_root: 树状表格根节点, 
    tree_p: 父类根节点,
    path_p: 目录名字
    """
    global code_lt
    global code_file_nums
    global code_file_lines
    # global ignore_file_type
    # global file_decoration_prefix        # 文件名前缀
    # global count_lines_with_null_string  # 计算代码行数时是否考虑空行
    # global put_null_string_to_txt        # 是否把空行也复制进文档

    dir_lt = os.listdir(abs_path_p)
    for item_name in dir_lt:
        item_abs_path = '{}/{}'.format(abs_path_p, item_name)
        if len(path_p) > 0:
            tmp_path = '{}/{}'.format(path_p, item_name)
        else:
            tmp_path = item_name
        if os.path.isdir(item_abs_path):
            copy_file_recurrent(item_abs_path, tmp_path)
        else:
            if item_name in ignore_name_lt:  # 跳过忽略的文件
                continue

            item_type = item_name.split('.')[-1]
            # print('@@@ item_type', item_type, item_type in ignore_file_type)
            # print(ignore_file_type)
            if item_type not in ignore_file_type:
                code_file_nums += 1
                code_lt.append('{}'.format(item_name))
                anaotation_template = annotation_map.get(item_type, '// {}')
                code_lt.append(anaotation_template.format(file_decoration_prefix + ' ' + tmp_path))

                tmp_lt = read_txt_lines(item_abs_path)

                for line_str in tmp_lt:
                    if len(line_str) > 0:
                        code_lt.append(line_str)
                        code_file_lines += 1
                    else:
                        if put_null_string_to_txt:
                            code_lt.append(line_str)
                        if count_lines_with_null_string:
                            code_file_lines += 1


# 选择文件线程操作
def select_work_dir_worker():
    global dir_path
    clearTreeView(tree_root)

    fp = filedialog.askdirectory(title=u'选择目标目录')
    if fp is not None and len(fp) > 0:
        dir_path = fp
        insert_item(tree_root, "", dir_path)

        tmp_path = fp
        if tmp_path[0] == '/':
            tmp_path = tmp_path[1:]   # mac下默认/开头
        tmp_path = tmp_path.replace('\\', '/').split('/')
        if len(tmp_path) > 4:
            tmp_path = tmp_path[-4:]
            tmp_path.insert(0, '...')
        else:
            tmp_path.insert(0, '')
        tmp_path = '/'.join(tmp_path)

        label1['text'] = 'work dir: {}'.format(dir_path)
        label2['text'] = 'tips: 选择了 {}'.format(tmp_path)
        label3['text'] = ''
    else:
        label2['text'] = 'tips: 您取消了选择 工作目录 操作.'


# 拷贝代码线程工作
def copy_code_op_worker():
    global code_lt
    global code_file_nums
    global code_file_lines

    if len(dir_path) == 0:
        label2['text'] = 'tips: 请您先选择工作目录.'
        return

    # 清零工作
    code_lt.clear()
    code_file_nums = 0
    code_file_lines = 0
    copy_file_recurrent(dir_path, '')

    # print(code_lt)
    print('代码文件: {}, 代码行数: {}'.format(code_file_nums, code_file_lines))
    # print('copy_code_op')
    fp = filedialog.asksaveasfilename(defaultextension='.txt')
    if fp is not None and len(fp) > 0:
        write_lt2txt(code_lt, fp)
        tmp_path = fp.replace('\\', '/')
        if tmp_path[0] == '/':
            tmp_path = tmp_path[1:]   # mac下默认/开头
        tmp_path = tmp_path.split('/')
        if len(tmp_path) > 4:
            tmp_path = tmp_path[-4:]
            tmp_path.insert(0, '...')
        else:
            tmp_path.insert(0, '')
        tmp_path = '/'.join(tmp_path)

        label2['text'] = '导出到 {}'.format(tmp_path)
        label3['text'] = '代码文件个数: {}, 代码行数: {}'.format(
            code_file_nums, code_file_lines
        )
    else:
        label2['text'] = 'tips: 您取消了 代码拷贝 操作.'
    
    code_lt.clear()
    code_file_nums = 0
    code_file_lines = 0


# 线程类
class MyThread(Thread):
    def __init__(self, func):
        """
        :param func: 可调用的对象
        """
        Thread.__init__(self)
        self.func = func
    
    def run(self):
        self.func()


# 线程工厂
def work_factory(func):
    t = MyThread(func)
    t.start()
    # t.join()


# 选择工作目录操作
def select_work_dir():
    work_factory(select_work_dir_worker)


# 拷贝代码操作
def copy_code_op():
    work_factory(copy_code_op_worker)


if __name__ == '__main__':
    window = tk.Tk()
    window.title("Code Copy v1")    # #窗口标题
    window.geometry("600x468")   # #窗口位置500后面是字母x

    bt1 = tk.Button(window, text='选择目录', width=16, height=1,
                    font=tf.Font(size=14), command=select_work_dir)
    bt1.place(x=100, y=30)
    bt2 = tk.Button(window, text='拷贝代码', width=16, height=1,
                    font=tf.Font(size=14), command=copy_code_op)
    bt2.place(x=350, y=30)

    label1 = tk.Label(window, text="请选择工作目录".format(dir_path))
    label1.place(x=40, y=64)

    label2 = tk.Label(window, text="")
    label2.place(x=40, y=420)

    label3 = tk.Label(window, text="")
    label3.place(x=40, y=440)

    '''
    树状结构
    '''
    tree_root = ttk.Treeview(window, height=16, columns='code')
    tree_root.place(x=100, y=100)


    # 不允许重新设置大小
    window.resizable('false', 'false')
    window.mainloop()   # #窗口持久化
复制代码
weixin_33756418的博客
03-01 1万+
'use strict'; /** * @param {Number} [baseFontSize = 100] - 基础fontSize, 默认100px; * @param {Number} [fontscale = 1] - 有的业务希望能放大一定比例的字体; */ const win = window; export default win.flex = (baseFontSize...
推荐开源神器:CutCode——代码片段复制从未如此简单!
gitblog_00066的博客
06-06 250
推荐开源神器:CutCode——代码片段复制从未如此简单! cutcodeA browser extension that enables double click to copy code snippet from stack overflow.项目地址:https://gitcode.com/gh_mirrors/cu/cutcode 在编程的世界里,Stack Overflow无疑是开发者...
CodeCopy: 一键复制代码的浏览器扩展
gitblog_00883的博客
08-18 403
CodeCopy: 一键复制代码的浏览器扩展 codecopyA browser extension that adds copy to clipboard buttons on every code block项目地址:https://gitcode.com/gh_mirrors/co/codecopy 项目介绍 CodeCopy一个高效便捷的浏览器扩展,它旨在简化开发者的生活,通过在网...
js复制Code
sowuqing的专栏
07-04 343
function copy2Clipboard(txt) {    if (window.clipboardData) {        window.clipboardData.clearData();        window.clipboardData
推荐一款神器:CodeCopy - 简化代码复制生活!
gitblog_00023的博客
05-15 371
推荐一款神器:CodeCopy - 简化代码复制生活! codecopyA browser extension that adds copy to clipboard buttons on every code block项目地址:https://gitcode.com/gh_mirrors/co/codecopy 在编程世界中,我们经常需要从各种在线资源中复制代码片段行学习和参考。为了提升这...
给文章增加“Copy Code”功能
weixin_33815613的博客
02-08 160
为了今后随笔中所带的代码更具特色一些,特给代码格式来个“Copy Code”功能,允许直接将代码内容拷贝到剪贴板上。 测试用程序: Copy Code 程序1 using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication2 {     clas...
copycode:命令行源代码管理工具
05-02
复制码 Copycode使您能够将代码项目的一部分复制到另一个位置,可用于一次更新本地副本或多个项目,或者共享文件并自动将其交付或备份(仅复制到本地计算机中)。 如何安装 通过composer安装我 composer global require javanile/copycode copycode.json结构 { " single-task " : { " name " : " Single task " , " description " : " run a single copy " , " from " : " .. " , " to " : " copy1 " , " exclude " : [ " co
java、python、go、shell等项目代码读取并存储到一个word文档中,软著申请工具。_code2docx.zip
08-28
java、python、go、shell等项目代码读取并存储到一个word文档中,软著申请工具。_code2docx
java、python、go、shell等项目代码读取并存储到一个word文档中,软著申请工具。.zip
01-20
在本项目中,我们主要关注的是使用Python编程语言来实现一个功能,该功能涉及读取多种编程语言(如Java、Python、Go和Shell)的源代码,并将这些代码内容整合到一个Word文档中,以便于整理和归档,可能的应用场景是...
软著申请模板-小工具
01-15
模板: 1.程序鉴别材料 2.计算机软件著作权合作开发协议 ...code 文件夹存放源代码 out.txt 为源代码输出 ruan.sh 执行./ruan.sh后,会把全部代码输出到out.txt中可以查看行号,以及直接粘贴带word文档中。
VSCode插件-项目代码快速提取至txt,可用于软著等_copyright-code.zip
最新发布
08-28
VSCode插件-项目代码快速提取至txt,可用于软著等_copyright-code
一个好用的软著代码提取工具软件
10-14
软著代码提取工具软件,输入顶层目录后,会自动提取子文件夹下规定的文件类型的内容;亲测好用,我可以提取800多页的代码
CodeCopy浏览器扩展实现在每个代码块上添加一个复制至剪贴板的按钮
08-08
CodeCopy 浏览器扩展实现在每个代码块上添加一个复制至剪贴板的按钮
CodeCopy:用python语言写的代码复制工具程序,可用于软着著作权源程序代码的复制或其他需要复制项目工程代码的地方
03-23
代码复制 用python语言写的代码复制工具程序,可用于软着著作权源程序代码的复制或其他需要复制项目工程代码的地方 作用: 复制项目工程代码一个Word文档中 生成一个项目工程文件文件树状图) 可自定义筛选条件和文档参数 轻松生成文件目录 使用 下载CodeCopy.py,运行即可 效果图 命令行输出: 工程结构文件内容: 生成的文档:(红框部分为自己添加,每个代码文件会生成一个一级标题,所以你可以轻松生成目录) 获得帮助 Python3基本语法 感谢 Python python-docx 作者 野牛
软著代码整理小工具,内附使用说明
06-27
1.入bin\Release,双击SourceConvert.exe打开软件 2.在源码所在目录文本框中粘贴你想导出的文件夹地址,可以是父文件夹 3.设置行数,默认8000行 4.点击处理源代码 5.复制下面文本框中出现的代码文件,粘贴到文档中即可.粘贴时最好是右键-粘贴选项选择只保留文本,这样每页是55行.满足需要.
软著源代码整理工具.zip
02-17
1.解压压缩包【软著申请源代码自动整理工具.zip】,入目录Release,双击SourceConvert.exe打开软件 2.设置读取源码所在目录,在对应文本框中粘贴你想导出的项目目录,支持多目录地址,换行粘贴即可 3.设置读取源码文件的扩展名,多个扩展名以英文分号隔开,如"*.*.php;*.cpp;*.h;*.java;*.html;*.js;*.cs" 4.处理源代码 5.复制下面文本框中出现的代码文件;粘贴到文档中即可;粘贴时最好是右键-粘贴选项选择只保留文本
copy复制代码
xiaomomi的博客
10-11 2458
const copyTranslateResult = () => { const copy = (e: any) => { e.preventDefault() e.clipboardData.setData('text/plain', 'content') document.removeEventListener('copy', copy) } document.addEventListener('copy', copy) .
CodeCopy —— 用于Typecho 复制代码 插件
hello world
02-19 1165
前言 其实早在4月份就已经把功能做好了。当时刚看完《JavaScript DOM编程艺术》,糊里糊涂地就写了两天。 原文:利用JavaScript 为Typecho添加 复制代码 功能 仿csdn - 兔子昂 今天又花了一两个小时做出了插件。Plugin.php中的参数都没看懂,直接copy了别人的插件。 介绍 仿的CSDN,只有鼠标放到代码块,才会显示复制代码,鼠标从代码块移开,复制代码方框消失。支持一篇文章多个代码块的单独复制(这里实现比较心累,用到了闭包)。 效果如下图: 点击复制代
谷歌浏览器好用的复制粘贴插件_CodeCopy- 一键快速复制代码 - Chrome开发者工具插件 - 画夹插件网...
weixin_39968436的博客
12-20 2337
CodeCopy开发背景身为开发者一定对于GitHub不陌生,有许多开放源代码项目都能在这里找到,GitHub作为一款基于Git的代码管理工具和协同工具是很优秀的,然而作为代码浏览和搜索工具,就和IDE差的很远了。我们之前介绍过一些GitHub阅读插件如Sourcegraph、insight.io for github,它们可以让你像 IDE一样浏览和搜索Github代码。开发者常用的除了GitH...
python拷贝一个文件到/code/test/这个位置
05-18
你可以使用Python的shutil模块中的copy()函数来拷贝文件。以下是一个示例代码: ```python import shutil src_file = '/path/to/source/file' dst_folder = '/code/test/' shutil.copy(src_file, dst_folder) ``` 将以上代码中的`/path/to/source/file`替换为源文件的路径,将`/code/test/`替换为目标文件夹路径即可。注意,如果目标文件夹不存在,程序会抛出异常。如果需要创建目标文件夹,可以使用os模块中的makedirs()函数创建。
写文章

热门文章

  • DDIM原理及代码(Denoising diffusion implicit models) 24644
  • 10种舒服的颜色及配色推荐 19426
  • python将红底证件照转成蓝底 18376
  • 单纯形法和对偶单纯形法 16552
  • torch.nn.CrossEntropyLoss用法(原理, nlp, cv例子) 11610

分类专栏

  • 人工智能 47篇
  • 图像生成模型 3篇
  • diffusion 5篇
  • 编程语言学习 26篇
  • 文献阅读 20篇
  • 实用工具 37篇
  • 前端开发 4篇
  • 每日一题 50篇
  • 后端开发 12篇
  • cs学习那些事 8篇
  • 框架学习 9篇
  • 心路闲谈 1篇
  • 蓝桥杯与天梯赛 19篇
  • 经典算法 23篇
  • 408 13篇
  • 基本素养 20篇
  • 面试机试准备 16篇
  • 数据分析 4篇
  • 移动开发 10篇
  • 数学建模 1篇

最新评论

  • java 线程池 demo

    CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • java 线程池 demo

    普通网友: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,文章思路清晰【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • python matplotlib常见基础用法总结

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性。

  • brew 安装mysql (Mac OS)

    a545132569: 咱这个方式安装的mysql my.cnf文件在哪呢?/usr/local下没有啊

  • DDIM原理及代码(Denoising diffusion implicit models)

    kkjay1: 开头就写错了吧,扩散过程不依赖?

最新文章

  • java 线程池 demo
  • Java多线程打印ABC
  • 校招 - 行业测评题、图形推理题、逻辑思维面试题,解题技巧汇总
2024年15篇
2023年13篇
2022年82篇
2021年191篇
2020年42篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家哈尔滨玻璃钢商场美陈河北玻璃钢海盗船雕塑泉州玻璃钢卡通人物雕塑佛山透明玻璃钢雕塑制作上海个性化玻璃钢雕塑图片廊坊天河玻璃钢人物雕塑门头沟区商场圣诞美陈供应商白银抽象人物玻璃钢雕塑多少钱玻璃钢龙的九子雕塑作品玻璃钢雕塑厂家供应商山东特色商场美陈供应长春玻璃钢动物雕塑价格上海泡沫玻璃钢卡通雕塑浙江开业商场美陈采购浙江大型商场美陈价格淮南玻璃钢雕塑制作厂家绍兴步行街玻璃钢雕塑设计陆川玻璃钢雕塑韶关户外玻璃钢人物雕塑荆门景区玻璃钢雕塑生产厂家张掖公园玻璃钢雕塑南通玻璃钢造型雕塑东莞树脂玻璃钢雕塑定做琼海玻璃钢浮雕人物山水雕塑德州玻璃钢雕塑定制汕尾公仔玻璃钢动物雕塑淄博卡通玻璃钢雕塑商场雕塑仿真屋玻璃钢雕塑浙江开业商场美陈销售江苏玻璃钢金属雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化