使用Python创建文件索引Excel
- 问题背景
- 测试文件准备
- 调试结果
- 调试成型的脚本
问题背景
之前参与过一个项目,在做应标的最后,需要做一个Excel,里面有文件的层级目录关系,还要有文件的超链接。当时记得一共有7个模块,每个模块一个目录,目录下面嵌套了很多层的目录,每层目录下面都有一定数量的文件。虽然在DOS下面可以tree一下,列出文件树,但是无法直接打开对应的文件。要手工添加超连接也是要了我们的老命。标最后交了,一大帮人,每个人两三个小时的时间也浪费了。
这样的场景要是再来一次咋办,再这么搞?没有积累没有提升,那还不歇逼。虽然已经不碰代码很多年,必要的时候也要能说搞就搞,那就抽了点时间,搞个脚本解决这个问题。本来想用shell,Python混一下,想想还是统一用Python吧
测试文件准备
首先准备一些简单的文件,用来做个测试。
调试结果
通过一些时间的调试,运行最后调好的脚本,生成对应的Excel文件。我就在对应的目录下面执行了脚本了。如果后面跟的参数不是当前目录的话,可能会出现一些小问题。
多了一个Excel文件,文件名为 FileTrace.xlsx
文件内容如下:
Excel稍作调整以后,如图。A列是层级关系,B列是超链接。点击B列的B12网格,就打开了对应的文件。
调试成型的脚本
下面的脚本供大家参考。有优化建议,欢迎大家评论。
__author__ = 'Wayne'
import os
import sys
from openpyxl import Workbook
def get_filename(dirname):
wb = Workbook()
ws = wb.create_sheet(title="Data")
ws["A1"] = "File Path"
ws["B1"] = "Hyperlink"
for roots, dirs, files in os.walk(dirname):
dirs.sort()
files.sort()
rowA = roots.count('/')*'| '+'|=>'+roots.split('/')[-1]
ws.append([rowA])
for file in files:
if file[0] != '.':
rowA = (roots.count('/')+1)*'| '+'|--'+file
rowB = '=hyperlink("' + roots + '/' + file + '","' + file + '")'
ws.append([rowA,rowB])
del wb['Sheet']
wb.save("FileTrace.xlsx")
def cmd_run():
if len(sys.argv) != 2:
print('参数个数错误')
exit()
if not os.path.exists(sys.argv[1]):
print('输入路径错误')
exit()
print(sys.argv[0], 'is running now\nPlease check the result file --> FileTrace.xlsx')
get_filename(sys.argv[1])
if __name__ == '__main__':
cmd_run()