Python在实际工作中的运用-指定目录内所有Excel文件转CSV
闲来无事浏览到《【办公自动化】使用Python批量处理Excel文件并转为csv文件》这篇博文,关于多层目录Excel转Csv在处理过程中略显繁复,而且灵活度不高,代码如下:
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保存到同一目录下即可。
完整代码如下:
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'执行完毕')