需求:在一个文件中,有多个同类型的文件(我这里是excel文件),它们的title都是一样,不同的是数据大小,现在需要将它们批量合并成一个文件(csv文件,csv在操作上要比excel好太多)
文件示例
思路:先对文件夹中同类型的文件遍历,存放到列表里,再使用pandas的concat函数合并,方向是向下合并,再删掉全是空值的行保存到csv文件即可。
# -*- coding: utf-8 -*-
'''
Author: Zion
@IDE: PyCharm
@Date: 2023/7/19 9:36
'''
import pandas as pd
import os
def concat_excel(path, order_name, settle_name):
file_name_list = os.listdir(path)
# 订单表
order_data_list = []
# 结算表
settle_data_list = []
for idx in file_name_list:
# 前缀为订单的是订单表
if idx.startswith('订单'):
data = pd.read_excel(path + '\\' + idx)
order_data_list.append(data)
# 前缀为订单流水的是结算表
if idx.startswith('订单流水'):
# 注意:没有一样的标题合并要设置header=None,不然会错位
# data = pd.read_excel(path + '\\' + idx, header=None)
data = pd.read_excel(path + '\\' + idx)
settle_data_list.append(data)
# 订单表合并
order_data_all_df = pd.concat(order_data_list, axis=0) # axis=0 向下合并
# 删掉全是空值的行
order_data_all_df.dropna(axis="index", how='all', inplace=True)
order_data_all_df.to_csv(r'C:\Users\admin\Desktop\\' + order_name, index=False)
# 结算表合并
settle_data_all_df = pd.concat(settle_data_list, axis=0) # axis=0 向下合并
# 删掉全是空值的行
settle_data_all_df.dropna(axis="index", how='all', inplace=True)
settle_data_all_df.to_csv(r'C:\Users\admin\Desktop\\' + settle_name, index=False)
print('程序运行成功..')
if __name__ == '__main__':
path = r'C:\Users\admin\Desktop\XXXXX文件\\' # 将所有要合并的excel文件放在该路径文件夹
save_order_name = '总订单表.csv'
save_settle_name = '总结算表.csv'
concat_excel(path, save_order_name, save_settle_name)