一个小要求:申请软件著作权时需要提交一页50行,共60页源代码。但是,设计的项目存储在多级目录中。不想一一复制,所以通过python和os模块获取目录下的所有文件,重新正则化过滤无效源代码,然后基于docx模块写入word。涉及到的模块有os,docx,re如果你可能没有以上模块,使用pipinstallXX下载分为2大步:1.先将一个文件夹下所有文件夹的.java文件路径保存到一个文件夹中list2.依次读取list的路径,将.java文件内容保存到word#!/usr/bin/envpython#-*-coding:utf-8-*-"""__title__=''__author__='mike_jun'__mtime__='2019-7-1'#目的:1.先将一个文件夹下所有文件夹的.java文件路径保存到一个列表中2.依次读取列表的路径,保存.java文件保存文件内容到word"""importosfromdocximportDocumentfromdocx.oxml.nsimportqnfromdocx.sharedimportPtimportrefromdocx.sharedimportLengthfileList=[]#使用全局列表保存文件路径defgetAllFile(path,fileList):#使用递归方法dirList=[]#保存文件夹files=os.listdir(path)#返回包含文件和文件夹的列表forfinfiles:if(os.path.isdir(path+'/'+f)):dirList.append(path+'/'+f)#保存文件夹名if(os.path.isfile(path+'/'+f)):fileList.append(path+'/'+f)#保存文件名fordirindirList:#如果文件夹为空,递归退出getAllFile(dir,fileList)#递归保存.java文件到fileListgetAllFile(r'E:\src\main\java\com\gdut',fileList)print('文件个数为:',len(fileList))defgetJavaFile(fileList):forfileinfileList:ifnotfile.endswith('.java'):#删除不是。java文件格式fileList.remove(file)print('文件个数为:',len(fileList))getJavaFile(fileList)print(os.path.isfile(fileList[0]))#判断是否删除第一个值是FiledefsaveDocFile():#SINGLE=>单间距(默认)#ONE_POINT_FIVE=>1.5倍间距#DOUBLE2=>双倍间距#AT_LEAST=>最小值#EXACTLY=>固定值#MULTIPLE=>多间距文档=Document()fromdocx.enum.textimportWD_LINE_SPACINGp=doc.add_paragraph('')#添加一个页面doc.styles['Normal'].font.name='TimesNewRoman'#文字正常,设置文本字体格式doc.styles['Normal'].font.size=Pt(8)#设置字体大小为5p.line_spacing_rule=WD_LINE_SPACING.EXACTLY#固定值paragraph_format=doc.styles['Normal'].paragraph_formatparagraph_format.line_spacing=Pt(12.9)#固定值为12,9点,保证每页50行代码save_file=r'E:\text.doc'codeNum=0fori,finenumerate(fileList):print('startingdeal%d'%i)withopen(f,encoding='UTF-8')asfile:#转换编码实现正确的中文输出Formatforlineinfile.readlines():ifline=='\n':#删除空行continueifre.match(r'^\s+$',line):#使用正则表达式删除所有空格空行continueifline.__contains__(r'/*')or\line.__contains__(r'*'):#删除注释continueifline.__contains__(r'//'):#删除包含//的注释,严格来说,删除要用正则表达式continuep.add_run(line)codeNum+=1#记录的是已经写入的数据ifcodeNum==3050:#保证打印不超过60页doc.save(save_file)returndoc.save(save_file)#保存少于60页yes,hehe
