1、背景
不知道小伙伴们平时有没有这样的困惑,去平台上面疯狂的导数,然后复制粘贴,做加工处理,做个表格,交给领导看,稍微不注意,还出错,被领导一顿批,下面我介绍一种简单的应用场景,使用代码来批量实现。
具体的情况如下:
(1)在某个文件夹下面,我们想把以xlsx为后缀的文件筛选出来
(2)获取下划线后面的订单id
(3)将xlsx为后缀的文件内容做纵向拼接
文件夹的内容如下:
订单表20191010的数据如下:
订单表20191011的数据如下:
想要变成的样式如下:
2、分析
简单过一下思路:
(1)首先观察一下文件夹中的文件命名规则,筛选出xlsx后缀的文件;
(2)使用正则找到订单id;
(3)将订单id数据填充到订单表中(纵向填充,范围与行数一致);
(4)将所有订单表数据拼接到一起,并将汇总数据写入到指定文件中(Python会自动根据列名进行拼接数据);
3、代码实现
import os
import re
import pandas as pd
file_path = "D:\\test" # 文件夹路径
file_list = os.listdir(file_path) # 获取文件夹下所有文件的名称,包括后缀
# print(file_list) # 结果是个list,且list中的每个元素是字符串类型
result_df = pd.DataFrame()
# 通过循环拼接每一个xlsx文件的数据
for file in file_list:
if file.endswith(".xlsx"): # 筛选出xlsx后缀的文件
path = os.path.join(file_path, file) # 通过join得到文件的绝对路径
order_id = re.findall(r"\d+\d*", file) # 通过正则获取订单id,返回的是一个list
read_data_1 = pd.read_excel(path, skiprows= 1) # 忽略第1行的数据,直接从第二行开始读取
# 构造并在指定位置插入订单id列,使用insert函数(这里加在了第1列)
length = len(read_data_1)
order_id_col = order_id * length
read_data_1.insert(0, "订单id", order_id_col) # 0 代表位置,首列
# 纵向拼接,python会自动根据列名纵向拼接数据
result_df = pd.concat([result_df, read_data_1], axis = 0, sort = False)
result_df.to_excel("D:\\test\\test.xlsx") # 将拼接的数据存储到指定文件中