Skip to content

Latest commit

 

History

History
167 lines (119 loc) · 4.98 KB

File metadata and controls

167 lines (119 loc) · 4.98 KB
title Python CSV 模块 - Python 速查表
description Python 内置 csv 模块,可轻松处理 CSV 文件。
Python CSV 模块

csv 模块提供了用于读取和写入 CSV 文件(常用于数据交换)的工具。

csv 模块 vs 手动文件读写 虽然您可以使用基本的文件操作和字符串方法(如使用 readwritesplit()open())来读写 CSV 文件,但 csv 模块旨在处理边缘情况,例如带引号的字段、嵌入的分隔符和不同的行尾。它确保了与由其他程序(如 Excel)生成的 CSV 文件的兼容性,并降低了解析错误的风险。对于大多数 CSV 任务,请优先使用 csv 模块而不是手动解析。
有关文件处理基础知识的更多信息,请参阅 文件和目录路径 页面。

要开始使用,请导入该模块:

import csv

csv.reader()

此函数接收一个文件,该文件必须是字符串的可迭代对象。换句话说,它应该是打开的文件,如下所示:

import csv

file_path = 'file.csv'

# 读取 CSV 文件
with open(file_path, 'r', newline='') as csvfile:
  reader = csv.reader(csvfile)

  # 遍历每一行
  for line in reader:
    print(line)

此函数返回一个 reader 对象,可以轻松地对其进行迭代以获取每一行。相应行中的每个列都可以通过索引访问,而无需使用内置函数 split()

csv.writer()

此函数接收要写入的 CSV 文件,与 reader 函数类似,应如下调用:

import csv

file_path = 'file.csv'

# 以写入 CSV 的模式打开文件
with open(file_path, 'w', newline='') as csvfile:
  writer = csv.writer(csvfile)

  # 执行某些操作

“执行某些操作”部分可以用以下函数替换:

writer.writerow()

将单行写入 CSV 文件。

# 写入标题行
writer.writerow(['name', 'age', 'city'])
# 写入数据行
writer.writerow(['Alice', 30, 'London'])

writer.writerows()

一次写入多行。

# 准备多行
rows = [
    ['name', 'age', 'city'],
    ['Bob', 25, 'Paris'],
    ['Carol', 28, 'Berlin']
]
# 一次性写入所有行
writer.writerows(rows)

csv.DictReader

允许您读取 CSV 文件并将每一行作为字典访问,默认使用文件中的第一行作为键(列标题)。

import csv

# 将 CSV 读取为字典(第一行成为键)
with open('people.csv', 'r', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    # 按名称而不是索引访问列
    for row in reader:
        print(row['name'], row['age'])
  • 每个 row 是一个 OrderedDict(在 Python 3.8+ 中是常规的 dict)。

  • 如果您的 CSV 没有标题,您可以使用 fieldnames 参数提供它们:

    reader = csv.DictReader(csvfile, fieldnames=['name', 'age', 'city'])

csv.DictWriter

允许您将字典作为行写入 CSV 文件。创建 writer 时必须指定字段名(列标题)。

import csv

fieldnames = ['name', 'age', 'city']
rows = [
    {'name': 'Alice', 'age': 30, 'city': 'London'},
    {'name': 'Bob', 'age': 25, 'city': 'Paris'}
]

# 将字典写入 CSV
with open('people_dict.csv', 'w', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()  # 写入标题行
    writer.writerows(rows)
  • 使用 writer.writeheader() 将列标题作为第一行写入。
  • writer.writerows() 中的每个字典的键必须与创建 writer 时指定的 fieldnames 匹配。

csv.reader() 和 csv.writer() 的附加参数

delimiter

应作为分隔字段的字符。正如文件类型所示,默认值为逗号 ,。根据区域设置,Excel 可能会生成以分号作为分隔符的 csv 文件。

import csv

# 使用分号分隔符读取 CSV
with open('data_semicolon.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        print(row)

lineterminator

用于结束一行的字符或字符序列。最常见的是 "\r\n",但也可能是 "\n"。

quotechar

用于引用包含特殊字符的字段的字符(默认为 ")。

# 使用单引号作为引用字符
reader = csv.reader(csvfile, quotechar="'")

有关更多详细信息,请参阅官方 Python csv 模块文档