失业程序员复习python笔记——Excel合并处理
实际工作中,我们可能会遇到一个场景,就是需要将很多excel文件的数据合并到一个excel文件中。那么今天就来看看怎么用python来实现这个功能。
生成待合并的excel文件
为了实现excel实现的这个功能,我们需要一批excel文件。看看我们怎么用代码生成一批excel文件
from openpyxl import Workbook
def genExcelFile(dst_file, sheet_name):
#待生成的excel数据
data_list = [['Name','Age','Sex'],
['Regina',34,'female'],
['Bob',35,'male']]
workbook = Workbook()
xlsheet = workbook.active # 获取默认的工作表
xlsheet.title = sheet_name # 设置工作表名称
for i,row in enumerate(data_list,start=1):
for j,item in enumerate(row,start=1):
xlsheet.cell(row=i, column=j, value=item)
# 保存文件
workbook.save(dst_file)
for i in range(10):
genExcelFile(f"./execlfiles/{i+1}.xlsx", f"result{i+1}")
执行完上面那段代码后,就可以在execlfiles目录下,获得10个excel文件。其中enumerate是python内置函数,用于在遍历可迭代对象(如列表、元组、字符串等)时同时获取索引和值。其中参数start表示索引起始值。
遍历excel文件
刚才生成的10个excel文件,怎么才能它们的文件路径呢?
from pathlib import Path, PurePath
def getExeclFiles(src_path):
p = Path(src_path)
files = [x for x in p.iterdir() if PurePath(x).match('*.xlsx')]
return files
files = getExeclFiles("./execlfiles")
for file in files:
print(file)
上面代码依次获取 src_path 变量指向的路径下所有的文件。同时,为了避免这个目录里的文件类型过多,使用了一个 if 语句用于条件判断,只提取.xlsx 结尾的文件。通过print函数可以看到所有生成文件的路径。
合并excel文件中的数据
先对生成excel的函数,做一下修改。把excel数据作为参数传递进来。
def genExcelFile(dst_file, sheet_name,data_list):
workbook = Workbook()
xlsheet = workbook.active # 获取默认的工作表
xlsheet.title = sheet_name # 设置工作表名称
for i,row in enumerate(data_list,start=1):
for j,item in enumerate(row,start=1):
xlsheet.cell(row=i, column=j, value=item)
# 保存文件
workbook.save(dst_file)
然后执行下面代码合并excel:
import openpyxl
content = []
for file in files:
wb = openpyxl.load_workbook(file) # 替换为你的文件路径
ws = wb.active
#content = []
for row in ws.iter_rows(values_only=True): # values_only=True 只获取值,不获取单元格对象
content.append(list(row))
print(content)
genExcelFile("./execlfiles/result.xlsx","合并结果",content)
执行完后,在excelfiles目录可以看到一个result.xlsx文件,里面有最开始生成的10个文件的所有数据