4种方法用Python批量实现多Excel多Sheet合并

简介: 4种方法用Python批量实现多Excel多Sheet合并


在数据处理中,经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法,使用Python批量实现多Excel多Sheet的合并。

方法一:使用pandas库

Pandas是Python中常用的数据处理库,提供了简便的数据处理功能。我们可以使用pandas的read_excel()函数读取Excel文件,然后使用concat()函数将多个工作表进行合并。

import pandas as pd  
  
# 读取Excel文件  
file_list = ['file1.xlsx', 'file2.xlsx']  
dfs = [pd.read_excel(file) for file in file_list]  
  
# 合并多个工作表  
result = pd.concat(dfs, ignore_index=True)  
  
# 保存到新的Excel文件  
result.to_excel('merged.xlsx', index=False)

方法二:使用openpyxl库

Openpyxl是Python中处理Excel文件的库,可以直接操作Excel文件。我们可以使用openpyxl的load_workbook()函数读取Excel文件,然后使用Workbook和Worksheet类创建新的工作簿和工作表,将多个工作表的数据复制到新的工作表中,最后保存为新的Excel文件。

from openpyxl import load_workbook  
from openpyxl.utils import get_column_letter  
from openpyxl.utils import range_boundaries  
from openpyxl.writer.excel import save_virtual_workbook  
from openpyxl import Workbook  
from openpyxl.utils import get_column_letter  
from openpyxl.utils.dataframe import dataframe_to_rows  
  
# 读取Excel文件  
file_list = ['file1.xlsx', 'file2.xlsx']  
merged_wb = Workbook()  
merged_ws = merged_wb.active  
merged_ws.title = "merged"  
headers = []  # 存储每个工作表的列名  
for file in file_list:  
    wb = load_workbook(filename=file)  
    ws = wb.active  # 获取第一个工作表  
    for row in ws[1:]:  # 获取列名  
        headers.append(row[0].value)  # 将列名添加到headers列表中  
    for row in ws:  # 获取数据行并复制到新的工作表中  
        new_row = []  # 存储新的一行数据  
        for cell in row:  # 遍历每个单元格并复制数据到新的行中  
            new_row.append(cell.value)  # 将单元格的值添加到新的行中  
        dataframe_to_rows(pd.DataFrame([new_row], columns=headers), index=False).map(lambda x: x.pop('Unnamed: 0'), axis=1).map(int).to_excel(merged_ws, index=False, header=False)  # 将新的行复制到新的工作表中,并设置数据类型为整数型  
merged_wb.save("merged.xlsx")  # 保存为新的Excel文件

方法三:使用xlrd和xlwt库

xlrd和xlwt是Python中用于读写Excel文件的库,可以处理.xls和.xlsx格式的文件。我们可以使用xlrd的open_workbook()函数读取Excel文件,然后使用Worksheet类获取工作表对象,遍历工作表中的所有数据,将数据写入新的Excel文件中。

import xlrd  
import xlwt  
  
# 读取Excel文件  
file_list = ['file1.xls', 'file2.xls']  
workbook = xlrd.open_workbook(file_list[0])  
  
# 创建新的Excel文件  
new_workbook = xlwt.Workbook()  
new_sheet = new_workbook.add_sheet('merged')  
  
# 获取第一个工作表  
sheet = workbook.sheet_by_index(0)  
  
# 合并多个工作表  
row = 0  # 当前行的索引  
for col in range(sheet.ncols):  # 遍历所有列  
    new_sheet.write(row, col, sheet.cell_value(0, col))  # 将列名写入新的工作表中  
    for row in range(1, sheet.nrows):  # 遍历所有数据行  
        new_sheet.write(row + row, col, sheet.cell_value(row, col))  # 将数据写入新的工作表中  
  
new_workbook.save('merged.xls')  # 保存为新的Excel文件

方法四:使用os和glob库

如果需要批量处理多个文件夹中的多个Excel文件,可以使用os和glob库来获取所有需要处理的文件。然后使用上述方法处理每个文件中的多个工作表,最后将结果保存到新的Excel文件中。

import os  
import glob  
import pandas as pd  
  
# 获取所有需要处理的Excel文件  
file_list = []  
folder_path = 'path/to/folder'  # Excel文件所在的文件夹路径  
for file in glob.glob(os.path.join(folder_path, '*.xlsx')):  # 获取所有.xlsx文件  
    file_list.append(file)  
  
# 合并多个工作表并保存到新的Excel文件中  
result = pd.DataFrame()  # 存储合并后的数据  
for file in file_list:  
    df = pd.read_excel(file)  # 读取Excel文件中的数据到DataFrame中  
    result = pd.concat([result, df])  # 将数据追加到结果中  
result.to_excel('merged.xlsx', index=False)  # 将结果保存到新的Excel文件中

在上述方法中,我们可以根据实际需求选择适合的方法进行多Excel多Sheet的合并。方法一和方法二适用于处理单个Excel文件中的多个工作表,而方法三和方法四则适用于批量处理多个Excel文件中的多个工作表。在实际应用中,我们可以根据数据量的大小、处理速度的要求以及个人偏好选择适合的方法。

注意事项

使用Python批量实现多Excel多Sheet合并时,需要注意以下事项:

  1. 文件路径和文件名:确保提供的文件路径和文件名正确无误,避免出现文件找不到或路径错误的情况。
  2. 文件格式和版本:确保所有要合并的Excel文件都是相同格式(如.xlsx)和版本,以免出现不兼容或读取错误。
  3. 表格格式和内容:在合并前,检查每个工作表的结构和内容是否一致,是否存在不同的列或数据类型。如果有差异,需要进行相应的处理或调整。
  4. 空值和缺失值:在合并过程中,可能会遇到空值或缺失值的情况。需要对这些值进行适当处理,例如填充、忽略或保留原始格式。
  5. 重复数据:合并多个Excel文件时,可能会存在重复的数据行。需要编写适当的逻辑来处理这些重复数据,例如保留最新的数据或根据特定条件进行筛选。
  6. 性能和内存使用:对于大量数据和多个Excel文件的合并操作,需要注意程序的性能和内存使用情况。如果数据量较大,可能需要考虑分批处理或使用更高效的数据处理方法。
  7. 错误处理:在合并过程中,可能会遇到各种错误,如文件损坏、格式不正确等。编写适当的错误处理逻辑可以帮助识别和处理这些错误,避免程序崩溃或数据丢失。
  8. 代码可维护性和可读性:编写易于理解和维护的代码可以提高代码的质量和可读性。注释、清晰的变量名和使用有意义的函数和方法名称等都是提高代码可读性的有效方法。
  9. 文档和注释:为代码添加文档和注释可以帮助其他人理解你的代码逻辑和实现方式。这对于团队合作或代码维护非常有用。
  10. 测试和验证:在合并之前,对每个单独的Excel文件进行测试和验证可以确保合并操作的有效性和准确性。通过比较合并前后的数据,可以发现潜在的问题并进行相应的修复。

此外,除了上述方法外,还有一些第三方库如pyexcelerate等也可以实现多Excel多Sheet的合并。这些库提供了更多的功能和灵活性,可以根据实际需求选择适合的库进行使用。

相关文章
|
4天前
|
存储 开发工具 git
好的git管理方法,标明项目_编号_(功能,不过还是在没有bug出现时就提交为好)+Excel表管理的格式
好的git管理方法,标明项目_编号_(功能,不过还是在没有bug出现时就提交为好)+Excel表管理的格式
|
11天前
|
Python
Python面向对象基础与魔法方法详解
Python面向对象基础与魔法方法详解
|
13天前
|
存储 数据挖掘 Python
使用Python集合高效统计Excel数据
使用Python集合高效统计Excel数据
31 7
|
15天前
|
Python
python中使用update()方法
【6月更文挑战第16天】
20 7
|
11天前
|
监控 安全 虚拟化
深入浅出Python沙箱越狱:原理、方法与防范
今天我们来聊一个有趣的话题 - Python沙箱越狱。在我们开始之前,先来搞清楚什么是Python沙箱吧。 简单来,Python沙箱就像是一个虚拟的"游乐场"。在这个游乐场里,你可以尽情地玩耍(运行Python代码),但是不能伤害到外面的世界(不能访问系统资源或执行危险操作)。这个"游乐场"有围栏(限制),有规则(安全策略),目的就是让你玩得开心,又不会搞出什么大乱子。
|
12天前
|
Python
python之字符串定义、切片、连接、重复、遍历、字符串方法
python之字符串定义、切片、连接、重复、遍历、字符串方法
10 0
python之字符串定义、切片、连接、重复、遍历、字符串方法
|
9天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:策略梯度方法
使用Python实现深度学习模型:策略梯度方法
8 0
|
10天前
|
关系型数据库 MySQL 数据库
Python中使用MySQL模糊查询的方法
(1)同样需要将your_username、your_password、your_database替换为我们的MySQL数据库的实际用户名、密码和数据库名。 (2)在mysql.connector.connect()中,我们没有直接指定字符集和游标类型,因为mysql-connector-python的默认配置通常已经足够好。但是,如果需要,我们可以添加这些配置选项。 (3)使用cursor.close()和cnx.close()来确保游标和连接都被正确关闭。 (4)mysql-connector-python也支持使用上下文管理器(即with语句)来自动管理游标和连接的关闭,但这需要创建一个