闲来无事浏览到《【办公自动化】使用Python批量处理Excel文件并转为csv文件》这篇博文,关于多层目录Excel转Csv在处理过程中略显繁复,而且灵活度不高,代码如下:
python">import pandas as pd
import os
from datetime import datetime
# 基础文件夹路径
base_dir = './sample_data'# 循环遍历到每一个excel文件并修改其文件类型为csv
for first_floor in os.listdir(base_dir): # 遍历第一层second_floor_dir = base_dir+'/'+first_floor # 获取第二层的文件路径for second_floor in os.listdir(second_floor_dir): # 遍历第二层third_floor_dir = base_dir+'/'+first_floor+'/'+second_floor # 获取第三层的文件路径for third_floor in os.listdir(third_floor_dir): # 遍历第三层fourth_floor_dir = base_dir+'/'+first_floor+'/'+second_floor+'/'+third_floor # 获取第四层的文件路径for file_dir in os.listdir(fourth_floor_dir): # 遍历第四层file_name = file_dir.split('.')[0] # 获取excel文件名称file_suffix = file_dir.split('.')[1] # 获取excel文件后缀print(fourth_floor_dir)if file_suffix=='xlsx' or file_suffix=='xls': # 判断文件是否是excel文件df = pd.read_excel(fourth_floor_dir+'/'+file_dir) # 读取excel文件df['Time'] = pd.to_datetime(df['Time'])df['Time'] = df['Time'].apply(lambda x:datetime.strftime(x,'%Y-%m-%d %H:%M:%S'))df.to_csv(fourth_floor_dir+'/'+file_name+'.csv',index=False) # 将excel文件保存为csv文件os.remove(fourth_floor_dir+'/'+file_dir) # 删除原来的excel文件
摘自《【办公自动化】使用Python批量处理Excel文件并转为csv文件》第二段“批量处理Excel文件并转为csv文件”
觉得此案例中处理过程比较死板,可以采用更简洁的代码完成此项工作,思路如下:首先可以通过遍历得到指定目录及其子目录下所有的Excel文件列表,然后再逐个将列表内的Excel文件转换为CSV保存到同一目录下即可。
完整代码如下:
python">import os
from pathlib import Path
import pandas as pd# 遍历目录得到Excel表格列表
def find_table_files(directory, extensions=('.xlsx', '.xls')):table_files = []for root, dirs, files in os.walk(directory):for file in files:if file.endswith(extensions):table_files.append(os.path.join(root, file))return table_files# 逐个将列表里表格转换为CSV文件
directory_path = f'd:\\xls'
files = find_table_files(directory_path)
for file in files:df = pd.read_excel(file)df.to_csv(f'd:\\xls\\ToCsv\\{Path(file).stem}.csv', index=False)
print(f'执行完毕')