最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python自動化辦公之處理CSV和Excel文件的操作指南

 更新時間:2025年11月17日 09:27:57   作者:小莊-Python辦公  
面向數(shù)據(jù)分析、報表生成與系統(tǒng)集成的日常工作,CSV 與 Excel 幾乎是最常用的兩種表格數(shù)據(jù)格式,下面我們就來系統(tǒng)講解如何在 Python 中高效讀寫 CSV 和 Excel吧

前言

面向數(shù)據(jù)分析、報表生成與系統(tǒng)集成的日常工作,CSV 與 Excel 幾乎是最常用的兩種表格數(shù)據(jù)格式。本文以實戰(zhàn)為導(dǎo)向,系統(tǒng)講解如何在 Python 中高效、穩(wěn)健地讀寫 CSV 和 Excel,覆蓋常見坑點與性能優(yōu)化策略,并給出可直接復(fù)制使用的代碼示例。

適用讀者與目標

  • 需要在后端或數(shù)據(jù)腳本中批量導(dǎo)入/導(dǎo)出表格數(shù)據(jù)
  • 想提升對編碼、空值、類型轉(zhuǎn)換、性能的掌控
  • 希望擁有一份可作為速查手冊的實用指南

庫選型與安裝

  • 標準庫:csv 讀寫 CSV,無需安裝。
  • 主力庫:pandas 處理結(jié)構(gòu)化數(shù)據(jù),CSV/Excel 通吃。
  • Excel 專用:openpyxl 讀寫 .xlsx;xlsxwriter 適合寫入時的樣式與大文件優(yōu)化。

安裝示例:

pip install pandas openpyxl xlsxwriter

讀取 CSV(標準庫 csv)

import csv
from pathlib import Path

path = Path("data.csv")

with path.open("r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        pass

使用字典形式更便于字段訪問:

import csv
from pathlib import Path

with Path("data.csv").open("r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for record in reader:
        pass

寫入 CSV(標準庫 csv)

import csv
from pathlib import Path

rows = [["id", "name", "score"], [1, "張三", 95]]

with Path("out.csv").open("w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    for row in rows:
        writer.writerow(row)

寫入帶表頭的字典:

import csv
from pathlib import Path

records = [
    {"id": 1, "name": "張三", "score": 95},
    {"id": 2, "name": "李四", "score": 88},
]

fieldnames = ["id", "name", "score"]

with Path("out_dict.csv").open("w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(records)

使用 pandas 讀寫 CSV

讀?。?/p>

import pandas as pd

df = pd.read_csv("data.csv", encoding="utf-8")

寫入:

df.to_csv("out.csv", index=False, encoding="utf-8")

逐塊讀取大文件:

import pandas as pd

for chunk in pd.read_csv("big.csv", chunksize=100_000):
    pass

只讀部分列并指定類型:

import pandas as pd

df = pd.read_csv(
    "data.csv",
    usecols=["id", "name", "score"],
    dtype={"id": "Int64", "name": "string", "score": "float64"},
)

編碼與本地化要點(Windows/Excel 友好)

  • Excel 偏好 UTF-8-SIG 或本地 ANSI。為兼容 Excel,寫入 CSV 時可用 utf-8-sig。
  • Windows 上換行符用 newline="" 交由 csv 控制,避免出現(xiàn)空行。
  • 含中文數(shù)據(jù)建議統(tǒng)一使用 utf-8utf-8-sig。

示例:

import csv
from pathlib import Path

with Path("excel_friendly.csv").open("w", encoding="utf-8-sig", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["編號", "姓名", "備注"]) 

pandas 側(cè):

import pandas as pd

df = pd.DataFrame({"編號": [1, 2], "姓名": ["張三", "李四"]})
df.to_csv("excel_friendly.csv", index=False, encoding="utf-8-sig")

讀取 Excel(.xlsx)

使用 pandas:

import pandas as pd

df = pd.read_excel("workbook.xlsx", sheet_name=0, engine="openpyxl")

指定列與類型:

import pandas as pd

df = pd.read_excel(
    "workbook.xlsx",
    sheet_name="Sheet1",
    usecols=["id", "name", "score"],
    dtype={"id": "Int64", "name": "string", "score": "float64"},
    engine="openpyxl",
)

使用 openpyxl 原生讀取:

from openpyxl import load_workbook

wb = load_workbook("workbook.xlsx", read_only=True)
ws = wb.active
for row in ws.iter_rows(values_only=True):
    pass
wb.close()

寫入 Excel 與多工作表

pandas 寫入多個工作表:

import pandas as pd

with pd.ExcelWriter("report.xlsx", engine="xlsxwriter") as writer:
    df1 = pd.DataFrame({"id": [1, 2], "name": ["張三", "李四"]})
    df2 = pd.DataFrame({"id": [3, 4], "name": ["王五", "趙六"]})
    df1.to_excel(writer, sheet_name="用戶A", index=False)
    df2.to_excel(writer, sheet_name="用戶B", index=False)

openpyxl 創(chuàng)建并寫入:

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "數(shù)據(jù)"
ws.append(["id", "name", "score"])
ws.append([1, "張三", 95])
wb.save("simple.xlsx")

樣式、公式與格式(Excel)

使用 xlsxwriter 設(shè)置樣式:

import pandas as pd

with pd.ExcelWriter("styled.xlsx", engine="xlsxwriter") as writer:
    df = pd.DataFrame({"金額": [1234.5, 6789.01]})
    df.to_excel(writer, sheet_name="Sheet1", index=False)
    workbook  = writer.book
    worksheet = writer.sheets["Sheet1"]
    fmt = workbook.add_format({"num_format": "#,##0.00", "bold": True})
    worksheet.set_column("A:A", 12, fmt)

插入公式(openpyxl):

from openpyxl import Workbook
from openpyxl.utils import get_column_letter

wb = Workbook()
ws = wb.active
ws.append(["單價", "數(shù)量", "總價"])
ws.append([10, 2, None])
ws["C2"] = "=A2*B2"
wb.save("formula.xlsx")

類型、缺失值與前導(dǎo)零

  • 賬單號、電話號碼等標識碼使用字符串類型,避免前導(dǎo)零丟失。
  • pandas 讀寫時可指定 dtype=str 或使用 converters 保留格式。
  • 缺失值處理可使用 na_filter=Falsekeep_default_na=False。

示例:

import pandas as pd

df = pd.read_csv(
    "ids.csv",
    dtype={"bill_no": "string", "phone": "string"},
    keep_default_na=False,
)

CSV ↔ Excel 轉(zhuǎn)換

CSV 轉(zhuǎn) Excel:

import pandas as pd

df = pd.read_csv("data.csv")
df.to_excel("data.xlsx", index=False)

Excel 轉(zhuǎn) CSV:

import pandas as pd

df = pd.read_excel("data.xlsx", engine="openpyxl")
df.to_csv("data.csv", index=False, encoding="utf-8")

多工作表合并讀?。?/p>

import pandas as pd

xls = pd.ExcelFile("book.xlsx", engine="openpyxl")
frames = [xls.parse(name) for name in xls.sheet_names]
merged = pd.concat(frames, ignore_index=True)

大文件與性能優(yōu)化

  • 流式讀取:pandas chunksize,openpyxl read_only=Trueiter_rows。
  • 避免不必要的類型推斷與解析,顯式傳入 dtype、usecols。
  • 寫入 Excel 時使用 xlsxwriter,速度更優(yōu),內(nèi)存占用更穩(wěn)。
  • pandas 2.x 可嘗試 engine="pyarrow" 讀取 CSV 以提升解析速度。

示例:

import pandas as pd

for chunk in pd.read_csv("big.csv", chunksize=200_000):
    pass

openpyxl 寫入大文件:

from openpyxl import Workbook

wb = Workbook(write_only=True)
ws = wb.create_sheet("數(shù)據(jù)")
for i in range(1_000_000):
    ws.append([i, f"name_{i}"])
wb.save("big.xlsx")

常見坑點與規(guī)避

  • Excel 的最大行數(shù)約 1048576,超出需拆分或改用 CSV。
  • Excel 可能將長數(shù)字自動格式化為科學(xué)計數(shù)法,讀寫時統(tǒng)一為字符串類型。
  • CSV 分隔符可能不是逗號,注意使用 sepdelimiter。
  • 字段中包含逗號或換行時需使用引號,pandas 自動處理,標準庫需配置 quotechar。
  • Windows 上若出現(xiàn) CSV 空行,檢查寫入文件是否設(shè)置 newline=""。

迷你速查

  • 讀 CSV:pd.read_csv("file.csv")
  • 寫 CSV:df.to_csv("file.csv", index=False)
  • 讀 Excel:pd.read_excel("file.xlsx", engine="openpyxl")
  • 寫 Excel:pd.ExcelWriter("file.xlsx", engine="xlsxwriter")
  • 兼容 Excel 的 CSV 編碼:encoding="utf-8-sig"
  • 大文件分塊:pd.read_csv(..., chunksize=...)
  • 指定列與類型:usecols=...、dtype=...

結(jié)語

掌握 CSV 與 Excel 的讀寫不僅是數(shù)據(jù)工程的基本功,更是提升系統(tǒng)集成與數(shù)據(jù)流轉(zhuǎn)效率的關(guān)鍵。將本文的示例與策略納入你的項目骨架,可以顯著降低編碼與格式問題帶來的不確定性,并在大數(shù)據(jù)量場景下獲得穩(wěn)定的性能表現(xiàn)。

到此這篇關(guān)于Python自動化辦公之處理CSV和Excel文件的操作指南的文章就介紹到這了,更多相關(guān)Python處理CSV和Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Python-pip安裝失敗問題及解決

    關(guān)于Python-pip安裝失敗問題及解決

    這篇文章主要介紹了關(guān)于Python-pip安裝失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python 多線程實現(xiàn)檢測服務(wù)器在線情況

    python 多線程實現(xiàn)檢測服務(wù)器在線情況

    本文給大家分享的是Python使用多線程通過ping命令檢測服務(wù)器的在線狀況,給大家了內(nèi)網(wǎng)和外網(wǎng)的2個例子,有需要的小伙伴可以參考下。
    2015-11-11
  • 用python登錄帶弱圖片驗證碼的網(wǎng)站

    用python登錄帶弱圖片驗證碼的網(wǎng)站

    這篇文章主要介紹了用python登錄帶弱圖片驗證碼的網(wǎng)站方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 21行Python代碼實現(xiàn)拼寫檢查器

    21行Python代碼實現(xiàn)拼寫檢查器

    21行python代碼實現(xiàn)的一個簡易但是具備完整功能的拼寫檢查器,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Python3 批量掃描端口的例子

    Python3 批量掃描端口的例子

    今天小編就為大家分享一篇Python3 批量掃描端口的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Pandas大文件分塊讀取與內(nèi)存優(yōu)化技巧

    Pandas大文件分塊讀取與內(nèi)存優(yōu)化技巧

    本文介紹了Pandas處理大數(shù)據(jù)時的性能優(yōu)化技巧,主要包括內(nèi)存優(yōu)化和分塊處理兩大核心方法,這些優(yōu)化技巧使Pandas能夠處理遠超內(nèi)存容量的大型數(shù)據(jù)集,提升數(shù)據(jù)處理效率
    2026-05-05
  • pandas刪除行刪除列增加行增加列的實現(xiàn)

    pandas刪除行刪除列增加行增加列的實現(xiàn)

    這篇文章主要介紹了pandas刪除行刪除列增加行增加列的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python列表去重的3種最常用方法

    Python列表去重的3種最常用方法

    本文介紹了Python列表去重的3種常用方法:使用dict.fromkeys()(推薦新手),保留原始順序且代碼簡潔;使用set(),最簡單但不保留順序;封裝成自定義函數(shù),便于復(fù)用,文章通過具體代碼示例演示了每種方法的應(yīng)用,需要的朋友可以參考下
    2026-01-01
  • python生成器的使用方法

    python生成器的使用方法

    這篇文章主要介紹了什么是生成器,生成器如何使用,下文用例子說明了怎么使用生成器
    2013-11-11
  • python入門字符串拼接\截取\轉(zhuǎn)數(shù)字理解學(xué)習(xí)

    python入門字符串拼接\截取\轉(zhuǎn)數(shù)字理解學(xué)習(xí)

    本篇內(nèi)容我們主要講有關(guān)Python字符串的用法,包括字符串的拼接、字符串怎么轉(zhuǎn)數(shù)字、字符串的格式化、字符串函數(shù)等內(nèi)容,有需要的朋友可以借鑒參考下
    2021-09-09

最新評論

绥阳县| 丹江口市| 临夏市| 尚志市| 乐都县| 四平市| 丹棱县| 内江市| 武清区| 楚雄市| 徐闻县| 五常市| 通渭县| 绍兴市| 佛学| 开江县| 渑池县| 淮南市| 鄯善县| 金堂县| 榆社县| 庐江县| 河北省| 宁武县| 密云县| 桐柏县| 沂源县| 三亚市| 双峰县| 巢湖市| 乡宁县| 任丘市| 尚志市| 榆社县| 武功县| 连平县| 开鲁县| 屯昌县| 高邑县| 古丈县| 子洲县|