pandas读写Excel文件

本文介绍了一个Python工具类,用于高效地读取和写入CSV及Excel文件。该工具支持指定列读取,并能够处理大型文件。同时,文章通过实例展示了如何使用此工具进行数据筛选和保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# coding:utf-8
import pandas as pd
import os


class Reader:
    """
    读取csv文件或xlsx文件
    """
    def __init__(self, path, cols):
        self.path = path
        self.cols = cols
        if not os.path.exists(self.path):
            raise FileNotFoundError("要读取的文件{}不存在,请重新选择!".format(self.path))

    def csv_reader(self, code):
        """
        读取CSV文件
        :return: 返回DataFrame
        """
        print(">>> 读取文件{}".format(self.path))
        chunk = pd.read_csv(self.path, sep=",", usecols=self.cols, chunksize=10000, encoding=code,
                            engine="python", header=0)
        df_csv = pd.DataFrame(pd.concat(chunk, ignore_index=True))
        print(">>> complete!")
        return df_csv

    def excel_reader(self):
        """
        读取Excel文件,支持xls、xlsx、xlsm,默认xlsx
        :return:返回OrderedDict(Sheet_name,DataFrame)
        """
        print(">>> 读取文件{}".format(self.path))
        df_xls = pd.read_excel(self.path, sheet_name=None, usecols=self.cols, engine=None, header=0)
        print(">>> complete!")
        return df_xls


class Writer:
    """
    写入输出csv文件或xlsx文件
    """
    def __init__(self, dataframe, path):
        self.dataframe = dataframe
        self.path = path
        self.mode = 'w'
        if os.path.exists(self.path):
            self.mode = 'a'

    def csv_writer(self, code):
        """
        写入CSV文件
        :return:返回CSV文件
        """
        print(">>> 写入文件{}".format(self.path))
        self.dataframe.to_csv(self.path, encoding=code, index=False)
        print(">>> complete!")

    def excel_writer(self, sht_name):
        """
        写入Excel文件,仅支持xlsx
        :return:返回Excel文件
        """
        try:
            # print(">>> 写入文件:" + self.path)
            print(">>> 向文件{}中写入{}".format(self.path, sht_name))
            with pd.ExcelWriter(self.path, mode=self.mode, engine='openpyxl') as writer:
                self.dataframe.to_excel(excel_writer=writer, sheet_name=sht_name, index=False)
            print(">>> complete!")
        except Exception:
            raise FileNotFoundError("要写入的文件{}路径有问题,请检查路径!".format(self.path))
# coding:utf-8
import file_reader_and_writer as rw

if __name__ == '__main__':
    # 读写csv
    open_path = r'D:\2月.csv'
    save_path = r'D:\2月(简版).csv'
    # file_cols = None
    file_cols = ['标题1','标题2','标题3']
    file_code = 'ANSI'
    df_Reader = rw.Reader(path=open_path, cols=file_cols)
    df_new = df_Reader.csv_reader(file_code)
    dfSuited = df_new[(df_new["标题1"] == "a") | (df_new["标题2"] == "b") | (df_new["标题3"] == "c")]
    df_writer = rw.Writer(dataframe=dfSuited, path=save_path)
    df_writer.csv_writer(code=file_code)
    # 读写Excel
    # open_path = r'D:\表1.xlsx'
    # save_path = r'D:\表2.xlsx'
    # df_Reader = rw.Reader(path=open_path, cols=file_cols)
    # df_new = df_Reader.excel_reader()
    # for sheet in df_new.keys():
    #     df_writer = rw.Writer(dataframe=df_new.get(sheet), path=save_path)
    #     df_writer.excel_writer(sht_name=sheet)
    print('执行完毕!')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值