新旧xls和xlsx混合读取合并(97-03版本)

老旧xls读取合并(97-03版本)混合新版xlsx

背景

最近工作需要进行多个Excel文件的合并,表头是一样的,就是版本有差异。特别是恶心的xls,pandas读取就编码报错,utf-8 gbk啥的都试过还是不行。实在没办法只好接入xlrd进行读取,然后拼成df处理 合并。这里有局限性,大家自己看着改
在这里插入图片描述
合并上述xls
在这里插入图片描述

解决方法

用这个代码进行读取read_xls(path,index=1) path是Excel文件路径,index是sheet的序号(e.g., sheet1 就写1)

def read_xls_excel(url,index):
    #这个函数只能读出数据
    '''
    读取xls格式文件
    参数:
        url:文件路径
        index:工作表序号(第几个工作表,传入参数从1开始数)
    返回:
        data:表格中的数据
    '''
    # 打开指定的工作簿
    workbook = xlrd.open_workbook(url)
    # 获取工作簿中的所有表格
    sheets = workbook.sheet_names()
    # 获取工作簿中所有表格中的的第 index 个表格
    worksheet = workbook.sheet_by_name(sheets[index-1])
    # 定义列表存储表格数据
    data = []
    # 遍历每一行数据
    for i in range(0, worksheet.nrows):
        # 定义表格存储每一行数据
        da = []
        # 遍历每一列数据
        for j in range(0, worksheet.ncols):
            # 将行数据存储到da列表
            da.append(worksheet.cell_value(i, j))
        # 存储每一行数据
        data.append(da)
    # 返回数据
    return data

def read_xls(path,index=1):
    #拼接xls成DF使用pandas接入
    data=read_xls_excel(path,index)
    df=pd.DataFrame(data[1:],columns=data[0])
    return df

完整读取文件代码

import xlrd
import pandas as pd
import os

def find_excel(filename):
    #定义获取excel文件路径
    root_files_Global=[]
    for root, dirs, files in os.walk('{}'.format(filename)):
        #os.walk能快速分出文件和类型
        for i in range(len(files)):
            #拿xls和xlsx文件
            if 'xls' in files[i] or 'xlsx' in files[i]:
                root_files_Global.append(root+'/'+files[i])
    return root_files_Global
def read_xls_excel(url,index):
    #这个函数只能读出数据
    '''
    读取xls格式文件
    参数:
        url:文件路径
        index:工作表序号(第几个工作表,传入参数从1开始数)
    返回:
        data:表格中的数据
    '''
    # 打开指定的工作簿
    workbook = xlrd.open_workbook(url)
    # 获取工作簿中的所有表格
    sheets = workbook.sheet_names()
    # 获取工作簿中所有表格中的的第 index 个表格
    worksheet = workbook.sheet_by_name(sheets[index-1])
    # 定义列表存储表格数据
    data = []
    # 遍历每一行数据
    for i in range(0, worksheet.nrows):
        # 定义表格存储每一行数据
        da = []
        # 遍历每一列数据
        for j in range(0, worksheet.ncols):
            # 将行数据存储到da列表
            da.append(worksheet.cell_value(i, j))
        # 存储每一行数据
        data.append(da)
    # 返回数据
    return data

def read_xls(path,index=1):
    #拼接xls成DF使用pandas接入
    data=read_xls_excel(path,index)
    df=pd.DataFrame(data[1:],columns=data[0])
    return df
    
#处理路径
run_path=r'你的文件夹'
#保存文件路径
save_path=r'汇总后文件名'
root_files_Global=find_excel(run_path)
try:
    df=pd.read_excel(root_files_Global[0])
except:
    df=read_xls(root_files_Global[0])
for i in root_files_Global[1:]:
    try:
        df=pd.concat([df,pd.read_excel(i)])
    except:
        df=pd.concat([df,read_xls(i)])
df.to_excel(save_path,index=False)
df

改这俩参数就好:

#处理路径
run_path=r’你的文件夹’
#保存文件路径
save_path=r’汇总后文件名’

局限性

1.只适合表头一样的
2.csv没弄,懒&反正也没人看 :)
3.保存的是xlsx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值