【Python】数据处理:CSV文件操作

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'])
相关推荐
froginwe118 分钟前
Python3与MySQL的连接:使用mysql-connector
开发语言
喵手11 分钟前
Python爬虫实战:公共自行车站点智能采集系统 - 从零构建生产级爬虫的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集公共自行车站点·公共自行车站点智能采集系统·采集公共自行车站点导出csv
喵手18 分钟前
Python爬虫实战:地图 POI + 行政区反查实战 - 商圈热力数据准备完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·地区poi·行政区反查·商圈热力数据采集
熊猫_豆豆24 分钟前
YOLOP车道检测
人工智能·python·算法
nimadan1225 分钟前
**热门短剧小说扫榜工具2025推荐,精准捕捉爆款趋势与流量
人工智能·python
灵感菇_26 分钟前
Java HashMap全面解析
java·开发语言
杜子不疼.28 分钟前
PyPTO:面向NPU的高效并行张量编程范式
开发语言
lly20240629 分钟前
C# 结构体(Struct)
开发语言
默默前行的虫虫30 分钟前
MQTT.fx实际操作
python
YMWM_39 分钟前
python3继承使用
开发语言·python