Python csv 模块
CSV(Comma-Separated Values)文件是一种常见的文件格式,用于存储表格数据。
CSV 文件由纯文本组成,每一行代表表格中的一行数据,而每一列则通过逗号(或其他分隔符)分隔。
CSV 文件通常用于数据交换,因为它简单且易于处理。
Python 提供了一个内置的 csv 模块,用于读取和写入 CSV 文件。这个模块简化了处理 CSV 文件的过程,使得开发者可以轻松地操作表格数据。
1. 读取 CSV 文件
要读取 CSV 文件,可以使用 csv.reader 对象。以下是一个简单的示例:
实例
import csv
# 打开 CSV 文件
with open('data.csv', mode='r', encoding='utf-8') as file:
# 创建 csv.reader 对象
csv_reader = csv.reader(file)
# 逐行读取数据
for row in csv_reader:
print(row)
# 打开 CSV 文件
with open('data.csv', mode='r', encoding='utf-8') as file:
# 创建 csv.reader 对象
csv_reader = csv.reader(file)
# 逐行读取数据
for row in csv_reader:
print(row)
代码解释:
open('data.csv', mode='r', encoding='utf-8'):以只读模式打开名为data.csv的文件,并指定编码为 UTF-8。csv.reader(file):创建一个csv.reader对象,用于读取文件内容。for row in csv_reader:逐行读取文件内容,每一行数据会被解析为一个列表。
2. 写入 CSV 文件
要写入 CSV 文件,可以使用 csv.writer 对象。以下是一个示例:
实例
import csv
# 要写入的数据
data = [
['Name', 'Age', 'City'],
['Alice', '30', 'New York'],
['Bob', '25', 'Los Angeles']
]
# 打开 CSV 文件
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
# 创建 csv.writer 对象
csv_writer = csv.writer(file)
# 写入数据
for row in data:
csv_writer.writerow(row)
# 要写入的数据
data = [
['Name', 'Age', 'City'],
['Alice', '30', 'New York'],
['Bob', '25', 'Los Angeles']
]
# 打开 CSV 文件
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
# 创建 csv.writer 对象
csv_writer = csv.writer(file)
# 写入数据
for row in data:
csv_writer.writerow(row)
代码解释:
open('output.csv', mode='w', encoding='utf-8', newline=''):以写入模式打开名为output.csv的文件,并指定编码为 UTF-8。newline=''用于避免在 Windows 系统中出现空行。csv.writer(file):创建一个csv.writer对象,用于写入文件内容。csv_writer.writerow(row):将每一行数据写入文件。
3. 使用字典读取和写入 CSV 文件
csv 模块还提供了 DictReader 和 DictWriter 类,它们可以将 CSV 文件的每一行解析为字典,或者将字典写入 CSV 文件。
使用 DictReader 读取 CSV 文件:
实例
import csv
with open('data.csv', mode='r', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
for row in csv_dict_reader:
print(row)
with open('data.csv', mode='r', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
for row in csv_dict_reader:
print(row)
使用 DictWriter 写入 CSV 文件:
实例
import csv
data = [
{'Name': 'Alice', 'Age': '30', 'City': 'New York'},
{'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
fieldnames = ['Name', 'Age', 'City']
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
# 写入表头
csv_dict_writer.writeheader()
# 写入数据
for row in data:
csv_dict_writer.writerow(row)
data = [
{'Name': 'Alice', 'Age': '30', 'City': 'New York'},
{'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
fieldnames = ['Name', 'Age', 'City']
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
# 写入表头
csv_dict_writer.writeheader()
# 写入数据
for row in data:
csv_dict_writer.writerow(row)
常用的属性和方法
csv 模块核心方法
csv.reader 和 csv.writer 对象常用方法
| 方法 | 说明 | 适用对象 |
|---|---|---|
__next__() | 迭代读取下一行(或使用 for 循环) | reader |
writerow(row) | 写入单行数据 | writer |
writerows(rows) | 写入多行数据(列表的列表) | writer |
csv.DictReader 和 csv.DictWriter 对象特性
| 特性/方法 | 说明 | 示例 |
|---|---|---|
fieldnames | 字段名列表(DictReader 自动从首行获取) | dict_reader.fieldnames |
writeheader() | 写入表头行(DictWriter 专用) | dict_writer.writeheader() |
常用参数说明
实例
1. 读取 CSV 文件
实例
import csv
with open('data.csv', 'r') as file:
reader = csv.reader(file, delimiter=',')
for row in reader:
print(row) # 每行是一个列表
with open('data.csv', 'r') as file:
reader = csv.reader(file, delimiter=',')
for row in reader:
print(row) # 每行是一个列表
2. 写入 CSV 文件
实例
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data) # 写入多行
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data) # 写入多行
3. 使用 DictReader 和 DictWriter(带表头)
实例
# 读取
with open('data.csv', 'r') as file:
dict_reader = csv.DictReader(file)
for row in dict_reader:
print(row['Name'], row['Age']) # 通过字段名访问
# 写入
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
dict_writer.writeheader() # 写入表头
dict_writer.writerow({'Name': 'Alice', 'Age': 25})
with open('data.csv', 'r') as file:
dict_reader = csv.DictReader(file)
for row in dict_reader:
print(row['Name'], row['Age']) # 通过字段名访问
# 写入
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
dict_writer.writeheader() # 写入表头
dict_writer.writerow({'Name': 'Alice', 'Age': 25})
4. 自定义方言(如处理 TSV 文件)
实例
csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)
with open('data.tsv', 'r') as file:
reader = csv.reader(file, dialect='tsv')
for row in reader:
print(row)
with open('data.tsv', 'r') as file:
reader = csv.reader(file, dialect='tsv')
for row in reader:
print(row)

点我分享笔记