一、引言
小明刚进入到新公司,就被委以重任:将365个Excel文件中的英文表头修改为中文。传统方法是逐一打开每个文件,手动修改标题,然后保存,最后再合并。这种方法不仅耗时耗力,还容易出错。如果用Python就可以实现批量修改表头,并快速合并,就可以大大地提速,这样原本可能需要2天的工作量,可能只需要1分钟就完成了。那么用Python又是如何实现的呢?
二、实现代码
1. 使用pandas来合并
如果使用Python中的pandas的话,根据他的需求可以分为3步:
第一步:读取所有xlsx文件,这时我们使用的是os模块,利用os模块批量获取xlsx格式文件,由于有时还会有~.xlsx这种文件,干扰python读取文件,所以要排除一下。
第二步:利用pandas模块建立一个DataFrame,设定好表头columns,后面合并xlsx时就不用读取第一行表头,直接进行合并了。
第三步:利用for循环,拼接路径地址,逐个读取xlsx文件,修改表头后,再利用pandas中的concat来合并xlsx文件,合完成后输出保存。
通过以上三步,就可以将 365 个xlsx文件合并成一个,合并后的excel表头按要求的中文来。只需编写10多行代码,他就可以在 2秒内完成这项工作,而不是花费24小时。
import os
import pandas as pd
import time
t1 = time.time() #定义时间
# 定义文件夹路径
folder_path = "./files/"
# 获取文件夹中所有Excel文件的文件名
file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")]
# 初始化一个空的DataFrame,用于存放合并后的数据
combined_df = pd.DataFrame(columns=['标题', '日期', '检查结果', '核检员'])
# 遍历所有Excel文件,并将它们合并到一个DataFrame中
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
df = pd.read_excel(file_path)
# 将列名改为所需的表头
df.columns = ['标题', '日期', '检查结果', '核检员']
# 将当前文件的内容追加到合并的DataFrame中
combined_df = pd.concat([combined_df, df], ignore_index=True)
# 保存合并后的数据到一个新的Excel文件
output_file = "combined_quality_report.xlsx"
combined_df.to_excel(output_file, index=False)
print(f"所有文件已成功合并,并保存为 {output_file},\n耗时:{round(time.time()-t1, 1)}秒")
2.使用openpyxl来合并
由于pandas在打包时不太方便,因此为了跨平台操作,我们可以把它改为openpyxl,当然我们可以不用手工去改,只把上面这些代码放到ChatGPT中,给出指令就可以了。
在使用openpyxl时,我们修改代码的逻辑,直接从第二行来读取,简化读取步骤,而不用更新读取excel的表头了,这样可以保证其生成的速度还可以提高不少。步骤如下:
第一步,使用 openpyxl 创建一个新的工作簿。
第二步,读取每个文件的内容并跳过表头,只合并数据行。
第三步,最后将合并的数据保存到一个新的Excel文件中。
实现的代码如下:
import os
import time
from openpyxl import Workbook,load_workbook
# 定义时间
t1 = time.time()
# 定义文件夹路径
folder_path = "./files/"
# 获取文件夹中所有Excel文件的文件名
file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")]
# 创建一个新的工作簿和活动工作表
combined_wb = Workbook()
combined_ws = combined_wb.active
# 添加表头
headers = ['标题', '日期', '检查结果', '核检员']
combined_ws.append(headers)
# 遍历所有Excel文件,并将它们合并到新的工作表中
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
wb = load_workbook(file_path)
ws = wb.active
# 跳过表头,从第二行开始读取数据
for row in ws.iter_rows(min_row=2, values_only=True):
combined_ws.append(row) # 将每一行数据添加到合并的工作表中
# 保存合并后的数据到一个新的Excel文件
output_file = "combined_quality_report.xlsx"
combined_wb.save(output_file)
print(f"所有文件已成功合并,并保存为 {output_file},\n耗时:{round(time.time() - t1, 1)}秒")
三、学后总结
在数字化办公时代,掌握编程和自动化技能对提升工作效率至关重要。Python作为一种易学且功能强大的编程语言,在处理重复性工作时展现出巨大潜力。如果你也想摆脱繁重的重复劳动,不妨尝试学习Python编程,让你的办公效率直线上升。