辛苦堆砌,转载请注明出处,谢谢!
最近项目中,定义了不少实体类,但是讨厌的是,需要写说明文档,这个工作可是重复性很高的工作,我需要从IDE复制实体类的变量名,打开word文档,粘贴在对应的表格位置上,然后再打开IDE复制注释,也就是这个字段的说明,再打开word,粘贴到这个表格位置上,更可恶的是,还有JSON串的参数说明,我还要再复制一遍,整个过程无趣的很,手也累的够呛。
今天复制了三个实体类,就感到无比厌烦,回家想了想,为什么不用Python自动化这个过程呢?想到了就开动吧,假设我有实体类如下所示:
public class User {
//用户名
private String username;
//密码
private String password;
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
}
import os, sys, docx
#创建一个doc对象,以写入表格和段落
doc = docx.Document()
#遍历当前目录,一般为存放实体类的目录
for fileName in os.listdir('.'):
#查找java文件
if fileName.endswith('.java'):
#保存变量和注释的列表,使用列表为了有序
varNameAndCommentList = []
#打开Java文件
javaFile = open(fileName, encoding='utf-8')
#循环处理每一行
line = javaFile.readline()
while line:
#去除每行的行首和行尾的空白字符
line = line.strip()
if line.startswith('public'):
#如果到达公有字段,退出循环
break;
elif line.startswith('//'):
#如果是注释行,保存注释
comment = line.lstrip('//')
#读取注释下面一行
declare = javaFile.readline().strip()
#检查是否是private字段,自由这样才是属性字段
if declare.startswith('private') and not line.startswith('public class'):
#去除结尾分号
declare = declare.rstrip(';')
#使用空格分隔字符串,取出最后一个字段,也就是变量名
varName = declare.split(' ')[2]
#将变量名和注释以冒号分隔存入列表
varNameAndCommentList.append(varName + ':' + comment)
#读取下一行
line = javaFile.readline()
#关闭Java文件
javaFile.close()
#创建表格,将变量名和注释写入表格
table = doc.add_table(rows=len(varNameAndCommentList), cols=2)
row = 0
for varNameAndComment in varNameAndCommentList:
varNameAndCommentSpilt = varNameAndComment.split(':')
table.cell(row, 0).text = varNameAndCommentSpilt[0]
table.cell(row, 1).text = varNameAndCommentSpilt[1]
row += 1
#创建段落,将变量名和注释写入段落
for varNameAndComment in varNameAndCommentList:
doc.add_paragraph(varNameAndComment)
#保存word文档
doc.save('temp.docx')