有些工作经验的朋友可能遇到过这种场景,为了一个认证,需要你生成你项目的代码清单。一个项目代码文件没有几百也有上千,如果全是手动复制,非常浪费时间。今天就展示一下怎么用python来自动生成
获取代码清单
要完成这个功能需要用到python的os模块,它用于与操作系统进行交互的核心模块,它提供了许多函数来操作文件和目录,以及执行一些基本的操作系统功能。
import os
path = 'D:\workspace3\demo'
def listFile(path):
for item in os.listdir(path):
full_path = os.path.join(path, item)
if os.path.isfile(full_path) and item.endswith('.java'):
print(full_path)
elif os.path.isdir(full_path):
listFile(full_path)
listFile(path)
执行以上代码后,就可以获得我的一个demo工程中所有代码清单。其中用到主要功能点如下:
l os.listdir(path): 列出目录内容
l os.path.join(path1, path2): 连接路径
l os.path.isfile(path): 检查是否为文件
l os.path.isdir(path): 检查是否为目录
当检查到当前路径是目录是,就递归调用listFile 函数,直到获取所有java文件。
把代码清单填充到excel文件中
首先,我先修改一下上面那个函数,让它把所有代码清单赋值到一个列表中。
def listFile(path):
java_files = []
for item in os.listdir(path):
full_path = os.path.join(path, item)
if os.path.isfile(full_path) and item.endswith('.java'):
# print(full_path)
java_files.append({
'code_path': os.path.dirname(full_path),
'file_name': item
})
elif os.path.isdir(full_path):
# listFile(full_path)
java_files.extend(listFile(full_path))
return java_files
当遍历到一个文件时,就添加一个字典,里面包含code_path和file_name。当遍历到目录时,就扩展这个最终要返回的列表。
然后定义一个清单文件模板,假设是这个样子的:
根据这个模板写一个生成清单的函数:
from openpyxl import load_workbook
from datetime import datetime
……
def generate_new_excel(template_path, java_files, output_dir=None):
# 加载模板文件
wb = load_workbook(template_path)
# 获取第一个工作表(或根据metadata指定的工作表)
sheet = wb.worksheets[0]
# 写入新的Java文件信息
for i, file_info in enumerate(java_files, start=2): # 从第2行开始写入
sheet.cell(row=i, column=1, value=file_info['code_path'])
sheet.cell(row=i, column=2, value=file_info['file_name'])
# 生成带时间戳的新文件名
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
new_filename = f"java_file_list_{timestamp}.xlsx"
# 确定输出路径
if output_dir and os.path.isdir(output_dir):
output_path = os.path.join(output_dir, new_filename)
else:
output_path = new_filename
# 保存新Excel文件
wb.save(output_path)
print(f"已生成新的文件清单: {output_path}")
return output_path
java_files = listFile(path)
generate_new_excel('./execlfiles/list.xlsx',java_files,'./execlfiles')
最后在指定目录下,就生成了一个预期想要的清单。
总结
这篇展示如何利用了python的os模块和openpyxl库,生成了一个指定目录下的代码清单。其实类似的文件清单的话,也可以按这方式生成。