(软著源代码编写)python提取多级⽬录下的.java⽂件,并将
其内容保存到word
⼀个⼩需求:
在申请软件著作权的时候,需要提交⼀页50⾏,总共60页的源代码。但是设计的项⽬保存在多级的⽬录下,不想⼀个⼀个复制,遂通过python ,os模块获得全部⽬录的⽂件,re正则化过滤⽆效源代码,然后基于docx模块写⼊到word中。涉及的模块有 os, docx, re
分为2 个⼤的步骤:
1. 先将⼀个⽂件夹下的所有⽂件夹的 .java ⽂件路径保存到⼀个列表中
2. 依次读取列表的路径, 将 .java ⽂件内容保存到word 中
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'mike_jun'
__mtime__ = '2019-7-1'
#⽬的: 1. 先将⼀个⽂件夹下的所有⽂件夹的 .java ⽂件路径保存到⼀个列表中
2. 依次读取列表的路径,将 .java ⽂件内容保存到word 中
"""
import os
from docx import Document
l.ns import qn
from docx.shared import Pt
import re
from docx.shared import Length
fileList = [] # 使⽤全局列表保存⽂件路径
def getAllFile(path, fileList):  # 使⽤递归⽅法
dirList = []  # 保存⽂件夹
files = os.listdir(path) # 返回⼀个列表,其中包含⽂件和⽂件夹
for f in files:
if (os.path.isdir(path + '/' + f)):
dirList.append(path + '/' + f)    #  将⽂件夹名字进⾏保存
if (os.path.isfile(path + '/' + f)):
fileList.append(path + '/' + f) # 将⽂件名保存
for dir in dirList: #如果⽂件夹为空时,递归⾃动退出
getAllFile(dir, fileList) # 递归保存到将.java ⽂件保存到 fileList 中
getAllFile( r'E:\src\main\java\com\gdut', fileList)
print('⽂件数量为: ',len(fileList))
def getJavaFile(fileList):
for file in fileList:
if dswith('.java'): # 删除不是 .java ⽂件的格式
print('⽂件数量为: ',len(fileList))
getJavaFile(fileList)
print(os.path.isfile(fileList[0])) # 判断第⼀个值是否是⽂件
def saveDocFile():
# SINGLE        =>  单倍⾏距(默认)
# ONE_POINT_FIVE =>  1.5倍⾏距
# DOUBLE2        =>  倍⾏距
# DOUBLE2        =>  倍⾏距
# AT_LEAST      =>  最⼩值
# EXACTLY        =>  固定值
# MULTIPLE      =>  多倍⾏距
doc = Document()
um.text import WD_LINE_SPACING
p = doc.add_paragraph('') #增加⼀页
doc.styles['Normal'].font.name = 'Times New Roman'  # 正⽂是normal,设置正⽂的字体格式    doc.styles['Normal'].font.size = Pt(8) #  设置字体的⼤⼩为 5 号字体
p.line_spacing_rule = WD_LINE_SPACING.EXACTLY  # 固定值
paragraph_format = doc.styles['Normal'].paragraph_format
paragraph_format.line_spacing = Pt(12.9)  # 固定值12,9磅, 保证每页有50⾏代码
save_file = r'E:\text.doc'
codeNum = 0
for i, f in enumerate(fileList):
print('starting deal %d'%i)
with open(f, encoding='UTF-8') as file:  # 转换编码以实现正确输出中⽂格式
for line adlines():
if line == '\n':  # 删除空⾏
continue
if re.match(r'^\s+$', line):  # 使⽤正则表达式删除全是空格的空⾏
continue
if line.__contains__(r'/*') or \
line.__contains__(r' *'):  # 删除注释
continue
if line.__contains__(r'//'): # 删除包含 // 的注释, 严格意义上应该使⽤正则表达式进⾏删除                    continue
p.add_run(line)
codeNum += 1 # 记录是已经写⼊的数据python怎么读文件夹下的文件夹
if codeNum == 3050:  # 保证打印出不⼤⼤超过与 60 页
doc.save(save_file)
return
doc.save(save_file)  # 不⾜60 页进⾏保存
print('all done')
saveDocFile()
print('all done')
还有缺点就是:页眉,页码,标题页没有做,⼿动做也是可以的,呵呵。
项⽬推荐:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。