CSV 文件(Comma-Separated Values,逗号分隔值文件)是一种常见的文本文件格式,用于存储表格数据。它的特点是用逗号或其他特定字符(如分号、制表符等)来分隔不同的字段,每行代表表格中的一条记录。
python
import csv
基本读写
读取 CSV 文件
最基本的功能是读取 CSV 文件。这可以通过 csv.reader
来实现。
python
with open('example.csv', newline='') as csvfile:
csvreader = csv.reader(csvfile) #每行内容解析为列表
for row in csvreader:
print(row)
这里,newline=''
是为了确保读取时不会因为行结束符的问题出现错误。
写入 CSV 文件
写入 CSV 文件可以使用 csv.writer
。
python
with open('output.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['Name', 'Age', 'City'])
csvwriter.writerow(['Alice', 30, 'New York'])
csvwriter.writerow(['Bob', 25, 'Los Angeles'])
writerow
方法用于写入单行数据。
字典读写
使用字典读取 CSV 文件
为了更方便地处理 CSV 文件,可以使用 csv.DictReader
,它将每行数据读成字典。
python
with open('example.csv', newline='') as csvfile:
csvreader = csv.DictReader(csvfile) # 创建 DictReader 对象
headers = csvreader.fieldnames # 可获取表头
print("Headers:", headers)
for row in csvreader: # 逐行读取数据
print(row)
DictReader
会自动将第一行作为字典的键。
使用字典写入 CSV 文件
类似地,使用 csv.DictWriter
可以将字典写入 CSV 文件。
python
with open('output.csv', 'w', newline='') as csvfile:
fieldnames = ['Name', 'Age', 'City']
csvwriter = csv.DictWriter(csvfile, fieldnames=fieldnames)
csvwriter.writeheader() # 写入表头
csvwriter.writerow({'Name': 'Alice', 'Age': 30, 'City': 'New York'})
csvwriter.writerow({'Name': 'Bob', 'Age': 25, 'City': 'Los Angeles'})
writeheader
方法用于写入表头。
复杂处理
处理不同的分隔符
CSV 文件并不总是用逗号分隔,可以用不同的分隔符。
python
with open('example_tab.csv', newline='') as csvfile:
csvreader = csv.reader(csvfile, delimiter='\t')
for row in csvreader:
print(row)
同样地,在写入时也可以指定分隔符。
python
with open('output_tab.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile, delimiter='\t')
csvwriter.writerow(['Name', 'Age', 'City'])
csvwriter.writerow(['Alice', 30, 'New York'])
csvwriter.writerow(['Bob', 25, 'Los Angeles'])
处理复杂的 CSV 格式
有时 CSV 文件中包含引号、换行符等特殊字符,可以使用 csv
模块中的 QUOTE_*
常量进行处理。
python
with open('complex.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL)
csvwriter.writerow(['Name', 'Age', 'City'])
csvwriter.writerow(['Alice', 30, 'New\nYork'])
csvwriter.writerow(['Bob', '25', 'Los "Angeles"'])
常见的 QUOTE_*
常量包括:
csv.QUOTE_ALL
: 对所有字段都加引号csv.QUOTE_MINIMAL
: 只对包含特殊字符的字段加引号csv.QUOTE_NONNUMERIC
: 对所有非数字字段加引号csv.QUOTE_NONE
: 不加引号
自定义 CSV 方言
可以通过 csv.register_dialect
创建自定义的 CSV 方言,方便处理不同格式的 CSV 文件。
python
csv.register_dialect('mydialect', delimiter=';', quoting=csv.QUOTE_NONE)
with open('example.csv', newline='') as csvfile:
csvreader = csv.reader(csvfile, dialect='mydialect')
for row in csvreader:
print(row)
在写入时也可以使用自定义方言:
python
with open('output.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile, dialect='mydialect')
csvwriter.writerow(['Name', 'Age', 'City'])
csvwriter.writerow(['Alice', 30, 'New York'])
csvwriter.writerow(['Bob', 25, 'Los Angeles'])