我的知识记录

Python写入CSV文件教程:csv模块与pandas两种写法

用Python把数据写入CSV文件,分别给出标准库csv和pandas to_csv两种写法,支持中文表头、追加模式、自定义分隔符,附完整代码。

场景痛点

处理完数据要导出给同事、传给系统、做报表,结果手动复制粘贴到Excel里,格式容易串、换行错位、中文乱码。用Python直接写CSV,一次成型,格式稳定,下次改个路径就能复用。

用到的库

pip install pandas

完整代码

# 用Python写入CSV文件
import csv
import pandas as pd

def write_with_csv_module(file_path):
"""用标准库csv.writer写入,适合一行一行追加、数据量不大的场景。"""
headers = ["姓名", "年龄", "城市", "月薪"]
data = [
["张三", 28, "北京", 18000],
["李四", 32, "上海", 22000],
["王五", 26, "深圳", 15000],
["赵六", 35, "杭州", 25000],
]

# newline="" 防止Windows写出空行
# encoding="utf-8-sig" 让Excel双击打开不乱码
with open(file_path, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(headers)      # 写表头
writer.writerows(data)        # 批量写多行
print(f"csv模块写入完成:{file_path}")

def append_row(file_path, new_row):
"""追加一行到已有CSV末尾。"""
with open(file_path, "a", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(new_row)
print(f"已追加一行:{new_row}")

def write_with_pandas(file_path):
"""用pandas写入,适合已经是DataFrame的数据。"""
df = pd.DataFrame({
"姓名": ["孙七", "周八"],
"年龄": [29, 41],
"城市": ["广州", "成都"],
"月薪": [19000, 21000],
})
# index=False 不写pandas自带的行号列
df.to_csv(file_path, index=False, encoding="utf-8-sig")
print(f"pandas写入完成:{file_path}")

def main():
out1 = "output_csv_module.csv"
out2 = "output_pandas.csv"

write_with_csv_module(out1)
append_row(out1, ["吴九", 30, "南京", 17000])

write_with_pandas(out2)

if __name__ == "__main__":
main()

代码讲解

  • csv.writer(f) 返回写入器,writerow 写一行,writerows 批量写列表的列表。
  • 打开模式 "w" 是覆盖写,"a" 是追加写,追加时不要重复写表头。
  • encoding="utf-8-sig" 带BOM,Excel双击打开中文不会乱码;如果是给Linux程序读,用 "utf-8" 即可。
  • newline="" 必须加,否则Windows下每行之间多一个空行。
  • pandas的 df.to_csv() 一行导出,index=False 去掉左侧那列行号。

运行结果

当前目录生成两个CSV文件:output_csv_module.csv 有5行数据(含追加的吴九),output_pandas.csv 有2行数据。用Excel或记事本打开都能看到中文正常显示。

注意事项

  • 字段里本身带逗号、换行、引号时,csv模块会自动加引号转义,不用手动处理。
  • 追加写文件时如果原文件不存在,第一次会自动创建,但表头要自己判断是否需要写。
  • pandas导出超大DataFrame时可以加 chunksize=100000 分块写,避免内存峰值。
  • 想写成分号分隔或制表符,加 delimiter=";"delimiter="\t"

Python写入CSV文件教程:csv模块与pandas两种写法

标签:

更新时间:2026-09-14 20:54:07

上一篇:Python写入JSON文件教程:json.dump中文不转义

下一篇:Python从SQLite查询结果导出Excel文件