模块csv使用
一、读取 CSV 文件
1.1 使用 csv.reader()
1 2 3 4 5
| with open('example.csv', newline='', encoding='utf-8', delimiter=',') as csvfile: reader = csv.reader(csvfile) for row in reader: print(row)
|
常用参数
| 参数 |
说明 |
| delimiter |
指定分隔符,默认为逗号, |
| quotechar |
指定引号字符,默认为双引号”” |
| skipinitialspace |
是否跳过分隔符后多余空格 |
1
| csv.reader(csvfile, delimiter=';', quotechar='"', skipinitialspace=True)
|
1.2 使用 csv.DictReader()
以字典形式读取,首行自动作为 key。
1 2 3 4
| with open('example.csv', newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: print(row['name'], row['age'])
|
常用参数
| 参数 |
说明 |
| fieldnames |
指定字段名(可用于无表头的CSV) |
二、写入 CSV 文件
2.1 使用 csv.writer()
1 2 3 4 5 6 7 8 9
| with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) writer.writerow(['name', 'age', 'gender']) writer.writerow(['Alice', 25, 'F']) writer.writerows([ ['Bob', 30, 'M'], ['Charlie', 35, 'M'] ])
|
常用参数
| 方法 |
说明 |
| writerow(row) |
写入一行数据 |
| writerows(rows) |
写入多行数据 |
2.2 使用 csv.DictWriter()
以字典形式写入,推荐用于字段较多或数据为字典结构时。
1 2 3 4 5 6 7 8 9 10 11
| with open('output.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['name', 'age', 'gender'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'name': 'Alice', 'age': 25, 'gender': 'F'}) writer.writerows([ {'name': 'Bob', 'age': 30, 'gender': 'M'}, {'name': 'Charlie', 'age': 35, 'gender': 'M'} ])
|
常用参数
| 方法 |
说明 |
| writeheader() |
写入表头 |
| writerow(dict) |
写入一行数据 |
| writerows(dicts) |
写入多行数据 |
三、处理换行符问题(Windows注意)
使用 newline=’’ 打开文件是推荐方式,防止出现空行。
1 2 3
| with open('file.csv', 'w', newline='', encoding='utf-8') as f: ...
|
四、特殊情况处理
4.1 自定义分隔符和引号
1
| csv.writer(f, delimiter=';', quotechar="'", quoting=csv.QUOTE_MINIMAL)
|
quoting 参数选项:
| 值 |
说明 |
| csv.QUOTE_ALL |
所有字段都加引号 |
| csv.QUOTE_MINIMAL |
只在需要时加引号(默认) |
| csv.QUOTE_NONNUMERIC |
非数字字段加引号 |
| csv.QUOTE_NONE |
不添加引号 |
五、完整案例
5.1 从 CSV 读取再写入新文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| import csv
with open('input.csv', newline='', encoding='utf-8') as infile, \ open('output.csv', 'w', newline='', encoding='utf-8') as outfile: reader = csv.DictReader(infile) fieldnames = reader.fieldnames writer = csv.DictWriter(outfile, fieldnames=fieldnames) writer.writeheader() for row in reader: writer.writerow(row)
|