欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas封裝Excel工具類的方法步驟

 更新時間:2023年04月17日 09:15:07   作者:憶想不到的暉  
本文主要介紹了Pandas封裝Excel工具類的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

引言

Excel是一種廣泛使用的電子表格軟件,它提供了大量的數(shù)據(jù)處理和計算功能,被廣泛應用于數(shù)據(jù)分析和報告中。在Python中,我們可以使用pandas庫來讀寫和處理Excel文件。但是,為了更方便和快速地操作Excel文件,我們可以封裝一個Excel工具類,提供常用的讀寫操作方法,以提高開發(fā)效率。本文將介紹如何使用Python封裝Excel操作工具類,并提供相應的例子說明。

1、列表轉(zhuǎn)Excel文件

這個方法可以將數(shù)據(jù)集列表轉(zhuǎn)換為Excel文件。該方法使用pd.ExcelWriter()創(chuàng)建Excel文件寫入器,然后使用pd.DataFrame()創(chuàng)建一個數(shù)據(jù)幀對象,再將其寫入Excel文件中。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { Excel文件操作工具模塊 }
# @Date: 2022/04/03 19:34
import pandas as pd
from typing import List, Union, Dict, IO


class ExcelUtils(object):
    """ Excel文件操作工具類 """

    @classmethod
    def list_to_excel(
            cls,
            path_or_buffer: Union[str, IO],
            data_list: list,
            col_mapping: dict = None,
            sheet_name: str = 'Sheet1',
            **kwargs
    ):
        """
        列表轉(zhuǎn) excel文件
        Args:
            path_or_buffer: 文件路徑或者緩沖流
            data_list: 數(shù)據(jù)集 List[dict]
            col_mapping: 表頭列字段映射
            sheet_name: sheet名稱

        Returns:
        """
        with pd.ExcelWriter(path_or_buffer) as writer:
            _col_mapping = list(col_mapping) if col_mapping else None
            df = pd.DataFrame(data=data_list, columns=_col_mapping)
            if col_mapping:
                df.rename(columns=col_mapping, inplace=True)
            df.to_excel(writer, sheet_name=sheet_name, index=False, **kwargs)

這里path_or_buffer可以是一個文件路徑或者一個緩沖流對象,data_list是一個列表,包含需要寫入Excel的數(shù)據(jù)。col_mapping是一個字典,用于將表頭列字段映射到數(shù)據(jù)集的字段名。

# 示例
user_list = [
    dict(id=1, name='hui', age=20),
    dict(id=2, name='wang', age=22),
    dict(id=3, name='zack', age=25),
]
user_col_mapping = {
    'id': '用戶id',
    'name': '用戶名',
    'age': '年齡',
}

ExcelUtils.list_to_excel('user.xlsx', user_list, col_mapping=user_col_mapping)

# 導出為excel文件字節(jié)流處理 
excel_bio = BytesIO()
ExcelUtils.list_to_excel(
    excel_bio,
    data_list=user_list,
    col_mapping=user_col_mapping,
    sheet_name='demo'
) 
excel_bytes = excel_bio.getvalue()

print("excel_bytes type => ", type(excel_bytes))

>>>out
excel_bytes type =>  <class 'bytes'>

這個例子將一個用戶數(shù)據(jù)集寫入一個Excel文件中,并將列名映射為中文,也可以將excel保存在緩存流中(字節(jié)數(shù)據(jù)),在一些web場景中可以更方便的將緩沖流響應給前端、或者上傳到一些OSS中,這樣就不用創(chuàng)建臨時文件、讀取、上傳。

2、多個列表轉(zhuǎn)Excel文件

如果有多個數(shù)據(jù)集需要寫入到同一個Excel文件中,可以使用該方法。它與前面的方法類似,但接受一個列表,列表中包含多個數(shù)據(jù)集及其對應的表頭列字段映射和sheet名稱。

將多個數(shù)據(jù)列表寫入到一個Excel文件中。

@classmethod
def multi_list_to_excel(
        cls,
        path_or_buffer: Union[str, IO],
        data_collects: List[tuple],
        **kwargs
):
    """
    多列表轉(zhuǎn)帶不同 sheet的excel文件
    Args:
        path_or_buffer: 文件路徑或者緩沖流
        data_collects: 大數(shù)據(jù)集 list[(data_collect, col_mapping, sheet_name)]
            data_collect: 數(shù)據(jù)集,
            col_mapping: 列字段映射,
            sheet_name: excel表sheet名稱

    Returns:
    """
    with pd.ExcelWriter(path_or_buffer) as writer:
        for data_collect, col_mapping, sheet_name in data_collects:
            df = pd.DataFrame(data=data_collect, columns=list(col_mapping))
            df.rename(columns=col_mapping, inplace=True)
            df.to_excel(writer, sheet_name=sheet_name, index=False, **kwargs)

參數(shù)說明:

  • path_or_buffer: 文件路徑或者緩沖流;
  • data_collects: 多個數(shù)據(jù)列表的元組集合,每個元組包含三個元素:需要寫入到Excel文件中的數(shù)據(jù)列表,列名與字典key的映射,Excel文件的sheet名稱。

示例:

user_list = [
    {'id': 1, 'name': 'hui', 'age': 18},
    {'id': 2, 'name': 'wang', 'age': 19},
    {'id': 3, 'name': 'zack', 'age': 20}
]

book_list = [
    {'id': 1, 'name': 'Python基礎教程', 'author': 'hui', 'price': 30},
    {'id': 2, 'name': 'Java高級編程', 'author': 'wang', 'price': 50},
    {'id': 3, 'name': '機器學習實戰(zhàn)', 'author': 'zack', 'price': 70},
]

user_col_mapping = {'id': '編號', 'name': '姓名', 'age': '年齡'}
book_col_mapping = {'id': '編號', 'name': '書名', 'author': '作者', 'price': '價格'}

data_collects = [
    (user_list, user_col_mapping, '用戶信息'),
    (book_list, book_col_mapping, '圖書信息')
]

ExcelUtils.multi_list_to_excel('multi_sheet_data.xlsx', data_collects)

感覺這方法參數(shù)太多,不太容易知道如何入?yún)?,后續(xù)可以用dataclass抽出結(jié)構(gòu)來入?yún)⑦@樣更好理解點。

3、讀取Excel表格數(shù)據(jù)

@classmethod
def read_excel(
        cls,
        path_or_buffer: Union[str, IO],
        sheet_name: str = "Sheet1",
        col_mapping: dict = None,
        all_col: bool = True,
        header: int = 0,
        **kwargs
) -> List[dict]:
    """
    讀取excel表格數(shù)據(jù),根據(jù)col_mapping替換列名
    Args:
        path_or_buffer: 文件路徑或者緩沖流
        sheet_name: 讀書excel表的sheet名稱
        col_mapping: 列字段映射
        all_col: True返回所有列信息,F(xiàn)alse則返回col_mapping對應的字段信息
        header: 默認0從第一行開啟讀取,用于指定從第幾行開始讀取

    Returns:
    """
    use_cols = None
    if not all_col:
        # 獲取excel表指定列數(shù)據(jù)
        use_cols = list(col_mapping) if col_mapping else None

    df = pd.read_excel(path_or_buffer, sheet_name=sheet_name, usecols=use_cols, header=header, **kwargs)
    if col_mapping:
        df.rename(columns=col_mapping, inplace=True)

    return df.to_dict("records")

示例代碼:

data = [
    {"id": 1, "name": "hui", "age": 30},
    {"id": 2, "name": "zack", "age": 25},
    {"id": 3, "name": "wang", "age": 40},
]

# 將數(shù)據(jù)寫入Excel文件
ExcelUtils.list_to_excel("read_demo.xlsx", data, col_mapping={"id": "用戶ID", "name": "姓名", "age": "年齡"})

# 讀取Excel文件
result = ExcelUtils.read_excel("read_demo.xlsx", col_mapping={"用戶ID": "id", "姓名": "name"})

print(result)

>>>out
[{'id': 1, 'name': 'hui'}, {'id': 2, 'name': 'zack'}, {'id': 3, 'name': 'wang'}]

可以將字典列表數(shù)據(jù)根據(jù)列字段映射轉(zhuǎn)換成中文表頭的excel,讀取excel時也可以將中文表頭轉(zhuǎn)成對應業(yè)務字段。

有些模板excel文件默認前幾行是說明文字,因此可以指定header參數(shù)來跳過這些說明文字,這里只是把一些常用的參數(shù)封裝了下,**kwargs 還是可以使用pandas的一些參數(shù)。

4、合并多個Excel文件到一個文件中(每個文件對應一個工作表)

@classmethod
def merge_excel_files(
        cls,
        input_files: List[str],
        output_file: str,
        sheet_name_mapping: Dict[str, str] = None,
        **kwargs
):
    """
    合并多個Excel文件到一個文件中(每個文件對應一個工作表)
    如果Excel文件有多個作表,則默認取第一個工作表
    Args:
        input_files: 待合并的excel文件列表
        output_file: 輸出文件路徑
        sheet_name_mapping: 文件工作表映射,默認為文件名
            {"文件名1": "sheet1", "文件名2": "sheet2"}

    Returns:
    """
    sheet_name_mapping = sheet_name_mapping or {}
    with pd.ExcelWriter(output_file, **kwargs) as writer:
        for file in input_files:
            df = pd.read_excel(file)
            sheet_name = sheet_name_mapping.get(file, file)
            df.to_excel(writer, sheet_name=sheet_name, index=False)

示例:

def merge_excel_files_demo():
    # 合并多個Excel文件
    ExcelUtils.merge_excel_files(
        input_files=["user.xlsx", "multi_sheet_data.xlsx"],
        output_file="merged_data.xlsx",
        sheet_name_mapping={
            "user.xlsx": "user",
            "multi_sheet_data.xlsx": "multi_sheet_data"
        }
    )

以上就是ExcelUtils工具類的所有方法及相應的例子,使用這個工具類可以輕松地進行Excel文件的讀寫、轉(zhuǎn)換和合并等操作,提高了開發(fā)效率和代碼復用率,但一些特定格式的excel文件處理還是不方便。

到此這篇關于Pandas封裝Excel工具類的方法步驟的文章就介紹到這了,更多相關Pandas封裝Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python處理按鈕消息的實例詳解

    python處理按鈕消息的實例詳解

    這篇文章主要介紹了python處理按鈕消息的實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • Django對數(shù)據(jù)庫進行添加與更新的例子

    Django對數(shù)據(jù)庫進行添加與更新的例子

    今天小編就為大家分享一篇Django對數(shù)據(jù)庫進行添加與更新的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python提示No module named images的解決方法

    python提示No module named images的解決方法

    這篇文章主要介紹了python提示No module named images的解決方法,是Python程序設計中經(jīng)常遇到的問題,本文給出了具有針對性的解決方法,需要的朋友可以參考下
    2014-09-09
  • Python?urllib庫的使用指南詳解

    Python?urllib庫的使用指南詳解

    所謂網(wǎng)頁抓取,就是把URL地址中指定的網(wǎng)絡資源從網(wǎng)絡流中讀取出來,保存到本地。?在Python中有很多庫可以用來抓取網(wǎng)頁,本文將講解其中的urllib庫,感興趣的可以了解一下
    2022-04-04
  • Python中導入自定義模塊的幾種方法總結(jié)

    Python中導入自定義模塊的幾種方法總結(jié)

    這篇文章主要介紹了Python中導入自定義模塊的幾種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python實現(xiàn)的用于搜索文件并進行內(nèi)容替換的類實例

    python實現(xiàn)的用于搜索文件并進行內(nèi)容替換的類實例

    這篇文章主要介紹了python實現(xiàn)的用于搜索文件并進行內(nèi)容替換的類,涉及Python針對文件及字符串的相關操作技巧,需要的朋友可以參考下
    2015-06-06
  • Python PyQt5中彈出子窗口解決子窗口一閃而過的問題

    Python PyQt5中彈出子窗口解決子窗口一閃而過的問題

    這篇文章主要介紹了Python PyQt5中彈出子窗口解決子窗口一閃而過的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python變量基礎知識

    Python變量基礎知識

    這篇文章主要介紹Python變量的基礎知識,圍繞Python變量相關知識點展開,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-10-10
  • 簡單了解python字符串前面加r,u的含義

    簡單了解python字符串前面加r,u的含義

    這篇文章主要介紹了簡單了解python字符串前面加r,u的含義,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 淺談python中的錯誤與異常

    淺談python中的錯誤與異常

    寫Python代碼的小伙伴不可避免地會遇到代碼執(zhí)行錯誤和異常,這次就來詳細的總結(jié)一下python中的錯誤和異常
    2021-06-06

最新評論