利用Python进行Excel的合并(使用pandas)
在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下。
博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大佬提出建议~
代码我自己已经用了一段时间,可以直接拿去用
主要功能
- 按行合并 ,即保留固定的表头(如前几行),实现多个Excel相同格式相同名字的表单按纵轴合并;
- 按列合并。 即保留固定的首列,实现多个Excel相同格式相同名字的表单按横轴合并;
- 表单集成 ,实现不同Excel中相同sheet的集成(即不汇总,仅集成到同一个新的Excel中)。此处的代码稍微改一下即可实现不同Excel中所有sheet的集成;
- 自动检测所需合并的sheet名称是否出现在所有的目标文件中,如果不是则予以提示 ;
- sheet选择、表头选择、功能选择界面实现可视化;
- 合并后进行简单的缺省值处理、格式处理
- 解决MacOS系统下文件目录中出现.DS_Store隐藏文件导致程序出错的bug。
用到的库
pandas 、tkinter 、 pathlib、os 、 xlrd
代码
import pandas as pd
import tkinter as tk
from tkinter import filedialog
import pathlib
import os
import xlrd
# 选择文件夹对话框,窗口交互,打开选择窗口
filedirectory = filedialog.askdirectory()
p1 = pathlib.Path(filedirectory) # 该部分主要为了获取目标路径下的文件名
print(p1)
bookname1 = os.listdir(p1) # 返回目标文件夹下的所有文件名
if ".DS_Store" in bookname1:
bookname1.remove('.DS_Store')
# 删除文件名里的.xlsx
bookname = []
for n in bookname1:
n1 = list(n) # 把字符变成列表
for i in range(5): # 因为去除的是.XSLX,5个字符,可以根据实际需要修改
n1.pop() # 依次删除最后一个元素
n2 = ''.join(n1) # 把列表变成字符
bookname.append(n2)
excles = p1.rglob('*.xlsx') # 类似于os.work,能够返回目标路径下的文件路径,并且可以添加条件
excelarr = []
for eachexcel in excles:
excelarr.append(eachexcel) # 创建目标路径下特定文件名的列表
# 建立一个交互窗口
windows = tk.Tk()
windows.title('请提供如下信息') # 设置文本框的标题
windows.geometry('1000x300') # 设置界面的大小
# tk.Label(windows, text='你好!this is Tkinter', bg='green', font=('Arial', 12), width=30, height=2)
# 说明:bg为背景,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高)
tk.Label(windows, text='请输入想要合并的sheet名称:').grid(row=0, column=0) # label用来显示不可编辑的文本和图标(提示性文字)
tk.Label(wi