实现思路
- 实现对文件的遍历
- 将所有文件在表格中以文件树样式展现
- 实现文件/文件夹的超链接
代码实现
import os
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import Font, Color
def get_filename(dirname):
column0 = dirname.count('\\')
#创建工作簿
wb = Workbook()
#创建sheet
sheet1 = wb.create_sheet(title="Data")
row = 1
#循环获取根目录,根目录下的文件及文件夹
for roots, dirs, files in os.walk(dirname):
#print(roots)
#计算不同层级文件的列数
column = roots.count('\\')
column = column - column0+1
#获取文件夹名
root_name = roots.split('\\')[-1]
#生成文件夹的超链接
rowB = '=hyperlink("' + roots + '","' + root_name + '")'
sheet1.cell(row=row,column=column).value=rowB
#设置单元格的颜色
ft = Font( color='FF0000')
sheet1.cell(row=row,column=column).font = ft
column = column + 1
for file in files:
#获取文件并将其设定为超链接
if file[0] != '.' and '~'not in file:
#print(file)
row = row + 1
rowB = '=hyperlink("' + roots + '\\' + file + '","' + file + '")'
sheet1.cell(row=row,column = column).value=rowB
row =row+1
#删除创建工作簿自动生成的sheet
#若要使用改sheet
#可以通过以下实现
#sheet1 = wb.active
#sheet1.title = "自动生成的sheet"
del wb['Sheet']
wb.save("get_file.xlsx")
if __name__ == '__main__':
#将文件夹路径作为参数传入
get_filename(r'D:\0000数据库\11个人资料及作业\嵌入式\嵌入式系统课程设计')
实现效果
代码解读
- os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
通过该函数可以得到一个三元tupple(dirpath, dirnames, filenames), 第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。dirpath 是一个string,代表目录的路径,dirnames 是一个list,包含了dirpath下所有子目录的名字。filenames 是一个list,包含了非目录文件的名字。
import os
import openpyxl
from openpyxl import Workbook
from openpyxl.styles import Font, Color
def get_filename(dirname):
for roots, dirs, files in os.walk(dirname):
print(roots)
print(dirs)
print(files)
print('\n')
if __name__ == '__main__':
get_filename(r'D:\0000数据库\11个人资料及作业\嵌入式\嵌入式系统课程设计')
程序运行结果(部分)
D:\0000数据库\11个人资料及作业\嵌入式\嵌入式系统课程设计
['boa', 'web控制例程']
['BOA-流程分析.pdf', 'boa的移植和cgi编译过程.doc', '~$a的移植和cgi编译过程.doc', '~$式系统课程设计要求.doc', '嵌入式系统课程设计要求.doc']
D:\0000数据库\11个人资料及作业\嵌入式\嵌入式系统课程设计\boa
['contrib', 'docs', 'examples', 'extras', 'src']
['boa.conf', 'ChangeLog', 'CREDITS', 'Gnu_License', 'mime.types', 'README']
D:\0000数据库\11个人资料及作
结论
由此可见,每次循环获取的roots的数据格式为string 是根目录 dirs为roots下的文件夹,files为roots下的文件
- openpyxl.Workbook()的相关操作
工作簿
创建工作簿:wb = Workbook()
保存工作簿:wb.save("FileTrace.xlsx")
sheet
自动生成的sheet: ws = wb.active
为sheet命名:ws.title = "worksheettitle"
创建新的sheet:sheet1 = wb.create_sheet(title="Data")
删除sheet:del wb['Sheet']
单元格
为单元格赋值:sheet1.cell(row=row,column=column).value=roots
ws["A1"] = "HOGE"
rows = [
["张三", "男", "8k"],
["李四", "女", "9k"],
["刘能", "男", "10k"],]
for row in rows:
ws.append(row)
设置单元格文字颜色:ft = Font( color='FF0000')
ws.cell(row=row,column=column).font = ft
为单元格设定超链接: rowB = '=hyperlink("' + roots + '\\' + file + '","' + file + '")'
sheet1.cell(row=row,column = column).value=rowB