需求:固定路径下,扫描所有文件夹和文件,按照excel导出。其中一列存文件的绝对路径。一列存文件名。一列存文件所属的上级文件夹名。
设计:
def excel_writer()
def file_scanner()
代码实现如下:
import os
import csv
import openpyxl
def scan_directory(path):
file_data = []
for root, dirs, files in os.walk(path):
for file_name in files:
file_path = os.path.join(root, file_name)
folder_name = os.path.basename(root)
file_data.append((file_path, file_name, folder_name))
return file_data
def export_to_excel(data, excel_file):
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['Absolute Path', 'File Name', 'Folder Name'])
for row in data:
ws.append(row)
wb.save(excel_file)
wb.close()
if __name__ == "__main__":
target_directory = "D:/项目/项目/RootDirectory/00ProjectManagement"
output_excel_file = "C:/Users/XXX/Downloads/output2.xlsx"
if os.path.exists(target_directory):
file_data = scan_directory(target_directory)
export_to_excel(file_data, output_excel_file)
print("Excel export completed.")
else:
print("Target directory not found.")
如果导出csv格式,代码如下:
import os
import csv
def scan_directory(path):
file_data = []
for root, dirs, files in os.walk(path):
for file_name in files:
file_path = os.path.join(root, file_name)
folder_name = os.path.basename(root)
file_data.append((file_path, file_name, folder_name))
return file_data
def export_to_csv(data, csv_file):
with open(csv_file, 'w', newline='', encoding='utf-8') as file:
csv_writer = csv.writer(file)
csv_writer.writerow(['Absolute Path', 'File Name', 'Folder Name'])
csv_writer.writerows(data)
if __name__ == "__main__":
target_directory = "D:/项目/RootDirectory/00ProjectManagement"
output_csv_file = "C:/Users/XXX/Downloads/output1.csv"
if os.path.exists(target_directory):
file_data = scan_directory(target_directory)
export_to_csv(file_data, output_csv_file)
print("CSV export completed.")
else:
print("Target directory not found.")
需要将csv设为utf-8编码,因为在windows下,python解释器会用gbk编码去解析decode过的unicode编码,这样的话就会导致解析不了,出现编码报错:“UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position”。 解决的办法就是,改变目标文件的编码,使其为utf-8。
参考链接:
1、简单介绍 os.path 模块常用方法_宗而研之的博客-CSDN博客
2、Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法_python_脚本之家
3、ChatGPT3.5