最近有个需求有很多零散的文件,需要合并后进行处理,因数量不多就先直接手动处理了,但是当文件数量变多时就不适合手动处理,需要通过代码的形式处理,比如:sql脚本、python脚本,这里我使用了python脚本进行处理
不知道是本人怪长时间没有写python脚本了,感觉在pycharm里面的写法跟记忆中在anaconda里面的写法不一样了,先出一个pycharm版本的,等有空的时候再更新anaconda版本的,看看是真假不一样
- pycharm版本代码
# 关闭警示
import warnings
warnings.filterwarnings("ignore")
# 正式进入拼接文件环节
#导入相关模块
import pandas as pd
import os
path = r"D:\xxxx" #源文件位置
# 新建一个新的空DataFrame,用于接收文件内容
base_df = pd.DataFrame(columns = ['列名称', '列名称', '列名称', '列名称', '列名称', '列名称',
'列名称', '列名称', '列名称', '列名称', '列名称', '列名称', '列名称',
'列名称', '列名称', '列名称', '列名称'])
# 获取文件名称列表
# 1. os.walk(path) 返回3个元组类型的列表,分别为:当前路径、子目录列表、当前路径下文件名称列表
# 2. os.listdir(path) 直接返回文件名称列表
for root ,root_file,file_list in os.walk(path):
for i in file_list:
file_path = path + "/" + i # 获取完整文件路径
df = pd.read_excel(file_path,skiprows = [0,1]) #读取文件,因为我的文件中前两行是我不需要的内容,故使用 skiprows 这个参数来跳过前两行内容,通过行索引规避
base_df = base_df._append(df) # 将每次循环的文件都输入到初始创建的空DataFrame中
# DataFrame 的增加元素内容使用的是:_append()函数,不是append()函数
# 循环结束,打印合并后的整体内容并输出到制定文件中
print(base_df)
concat_file = path + "/concat_file.xlsx"
base_df.to_excel(concat_file)
- Anaconda版本
#导入数据包
import pandas as pd
import os
#获取文件列表
path = r"D:\to my\file"
file_list = os.listdir(path)
print(file_list)
# 遍历文件内容进行合并
contain = pd.DataFrame(columns = ['列名称', '列名称', '列名称', '列名称', '列名称', '列名称',
'列名称', '列名称', '列名称', '列名称', '列名称', '列名称', '列名称',
'列名称', '列名称', '列名称', '列名称'])
to_path = path + "/contain.xlsx"
for file in file_list:
file_path = path + "/" + file
df_file = pd.read_excel(file_path,skiprows = [0,1])
print(df_file.columns)
contain = contain.append(df_file) # 这里和pycharm不一样,
# 等同于 contain = pd.merge(contain,df_file,axis = 0) # axis = 0,表示为纵向拼接
print(contain)
contain.to_excel(to_path)