公司项目申请软著,看到同事在一行一行的复制,用python2分钟帮了他

简介: 公司项目申请软著,看到同事在一行一行的复制,用python2分钟帮了他

前言

公司最近几个项目在申请软著和专利,申请过的小伙伴都知道,申请软著的时候,

需要提交一份word代码.

早上刚来的时候看到同事在:

Run_申请软著();

路过接水的时候看到同事依然在:

Run_申请软著();

路过上厕所的时候看到同事依然在:

Run_申请软著();

路过上开会的时候看到同事依然在:

Run_申请软著();

中午的时候看到同事依然在:

Run_申请软著();

省略99+次;

省略99+次;

晚上下班的时候看到同事竟然还在:

Run_申请软著();

为了简化说明,我提出来了公共部分:

Run_申请软著():{
  项目=项目0
  loop(1):
  {
  start:
    //1.打开[项目]源码目录;
    //2.打开[项目]源码中的其他子目录;
    //3.找到[项目]中:{.c,.cpp,.h,...}源码;
    //3-1.打开找到的{.c,.cpp,.h,...}源码;
    //3-2.复制找到的{.c,.cpp,.h,...}源码;
    //3-3.粘贴找到的{.c,.cpp,.h,...}源码 到 word中;
    //4.调整word格式;
    //5.挨个删除每一行回车换行符;
    //6.挨个删除每一行空白的行;
    //7.保存
  end:
    jump start;
  }
}

Python: 该我上场了

Python牛鼻.

我比较喜欢在做事情之前先分析一把,这样在真正做的时候,也能减小出错率;

其实流程就是下面这个:

Run_申请软著():{
  项目=项目0
  loop(1):
  {
  start:
    //1.打开[项目]源码目录;
    //2.打开[项目]源码中的其他子目录;
    //3.找到[项目]中:{.c,.cpp,.h,...}源码;
    //3-1.打开找到的{.c,.cpp,.h,...}源码;
    //3-2.复制找到的{.c,.cpp,.h,...}源码;
    //3-3.粘贴找到的{.c,.cpp,.h,...}源码 到 word中;
    //4.调整word格式;
    //5.挨个删除每一行回车换行符;
    //6.挨个删除每一行空白的行;
    //7.保存
  end:
    jump start;
  }
}

目录接口大概如下:

zhenghui@zh-pc:/软著代码$ tree ./ |grep -E -v ".txt|.c|.h"
./
├── 项目A
│   ├── master
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
│   ├── slave
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
│   └── ui
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
├── 项目B
│   ├── master
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
│   ├── slave
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
│   └── ui
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
├── 项目C
│   ├── master
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
│   ├── slave
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
│   └── ui
│   │   ├── a.c
│   │   ├── a.h
│   │   ├── b.cpp
└── └──

核心:

1、编码类型不一样,因为编码的风格以前没统一,导致了有的是UTF-8,GB2312,Windows-1254,Windows-1252,GBK等等各种编码格式都有,导致了有些数据python无法直接解析,需要手动指定编码格式才行.天呢,这么多代码,手动指定,不得累死,就查了下,可以这样做:

首先根据文件判断以下文件的编码类型:

# 获取文件类型
def get_files_encoding_type(file_dir):
    # 判断文件的编码类型
    enc = ""
    with open(file_dir, 'rb') as file:
        # 验证该文件的字符编码类型
        encoding_message = chardet.detect(file.read())
        enc = encoding_message['encoding']
        # GB2312,GBK,GB18030,是兼容的,包含的字符个数:GB2312 < GBK < GB18030
        # "Windows-1254" and  "Windows-1252" 也统一让gb18030处理,后面需要抑制一下报错
        if enc == "GB2312" or enc == "GBK" or enc == "Windows-1254" or enc == "Windows-1252":
            enc = "gb18030"
    return enc

然后在读取文件的时候,抑制以下error:

# 读源代码文件 errors='ignore':忽略报错
    file = open(read_dir, 'r', encoding=enc, errors='ignore')

2、源代码中可能存在一些.ini,.txt,makefile等类似的配置文件,我不需要,所以需要判断以下:

# 判断是否为想要的文件格式
def verify_file_type(file_path):
    flag = False
    # 判断文件后缀
    file_suffix = os.path.splitext(file_path)[-1]  # .c/.h/.cpp
    if file_suffix == ".h" or file_suffix == ".c" or file_suffix == ".cpp":
        flag = True
    return flag

全部代码:

```python
# -*- coding: UTF-8 -*-
import os
import chardet
# 是否输出文件名
# _printf_src_name = False
_printf_src_name = True
# 获取文件类型
def get_files_encoding_type(file_dir):
    # 判断文件的编码类型
    enc = ""
    with open(file_dir, 'rb') as file:
        # 验证该文件的字符编码类型
        encoding_message = chardet.detect(file.read())
        enc = encoding_message['encoding']
        # GB2312,GBK,GB18030,是兼容的,包含的字符个数:GB2312 < GBK < GB18030
        # "Windows-1254" and  "Windows-1252" 也统一让gb18030处理,后面需要抑制一下报错
        if enc == "GB2312" or enc == "GBK" or enc == "Windows-1254" or enc == "Windows-1252":
            enc = "gb18030"
    return enc
# 读取文件并写入新文件
def read_and_write_file(read_dir, enc, save_file):
    # 是否在首行写入源代码名字
    if _printf_src_name:
        dirarray = read_dir.split("/")
        curr_save_file_name = dirarray[len(dirarray) - 1]
        # 第一行写入源代码文件的名字
        save_file.write(("//"+ curr_save_file_name +":").encode())
        save_file.write("\n".encode())
    # 读源代码文件 errors='ignore':忽略报错
    file = open(read_dir, 'r', encoding=enc, errors='ignore')
    for line in file:
        if (len(line) > 0):
            # 跳过空行
            if line.isspace() == False:
                # 替换换行符
                res = line.replace('\n', '')
                # write file
                save_file.write(res.encode())
                save_file.write("\n".encode())
# 判断是否为想要的文件格式
def verify_file_type(file_path):
    flag = False
    # 判断文件后缀
    file_suffix = os.path.splitext(file_path)[-1]  # .c/.h/.cpp
    if file_suffix == ".h" or file_suffix == ".c" or file_suffix == ".cpp":
        flag = True
    return flag
# 递归遍历目录
def traversal_files_save_txt(dir_path, save_file):
    for dir in os.listdir(dir_path):
        dir = os.path.join(dir_path, dir)
        # 判断当前目录是否为文件
        if os.path.isfile(dir):
            # 判断文件后缀
            if verify_file_type(dir):
                # 判断文件的编码类型,
                enc = get_files_encoding_type(dir)
                if enc == "":
                    continue;
                # 写文件
                read_and_write_file(dir, enc, save_file)
            else:
                print(dir, "不支持,该文件不是源代码文件")
        # 判断当前目录是否为文件夹
        if os.path.isdir(dir):
            traversal_files_save_txt(dir, save_file)
def traversal_files_to_txt(dir_path):
    for dir in os.listdir(dir_path):
        # 如果是目录就以目录的名字创建一个txt文件存储这个目录中的代码
        save_file_name = dir + ".txt"
        if _printf_src_name:
            save_file_name = dir + "-首行带源文件名.txt"
        save_dir = os.path.join(dir_path, dir)
        if os.path.isdir(save_dir):
            save_txt_file = os.path.join(dir_path, save_file_name)
            print("save_path=", save_dir, save_txt_file)
            # open save file text
            save_file = open(save_txt_file, 'wb+')
            # write .c .cpp .h to txt file
            traversal_files_save_txt(save_dir, save_file)
if __name__ == '__main__':
    dir_path = r'./软著代码/'
    traversal_files_to_txt(dir_path)


目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
59 2
|
3月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
109 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
21天前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
25天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
1月前
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
85 3
|
3月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
140 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
2月前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
73 1
|
2月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
72 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
118 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
105 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台