Python3操作读写CSV文件使用包过程解析

Oliver
Oliver
发布时间:2026-10-13| 4人浏览过
原创

本文详解Python3中如何使用内置csv模块进行CSV文件的读写操作。涵盖基础读写、中文UTF-8与UTF-8-SIG编码处理、标题行提取、逐行与批量写入技巧,以及利用DictReader和DictWriter进行字典格式数据处理的完整流程与注意事项。

CSV文件基础与编码处理

CSV(Comma-Separated Values)即逗号分隔值文件,是一种以逗号为分隔符、按行存储的纯文本格式。需要注意的是,CSV文件中所有的值在存储时均表现为字符串类型,即使内容是数字,也需按字符串处理。

若CSV文件中包含中文字符,读写时必须指定utf-8编码。若需确保该文件能被Excel正确识别且无乱码,建议使用utf-8 with bom格式,或在Python中指定utf-8-sig编码进行读写。

Python csv模块基础读写

在Python3环境中,操作CSV文件可直接调用标准库中的csv模块,无需安装第三方依赖。

使用reader=csv.reader(f, delimiter=',')可读取数据。该函数返回一个生成器,每次迭代读取一行数据,并将该行解析为列表格式。通过delimiter参数可自定义分隔符,默认为逗号。

使用writer=csv(f)用于写入数据。写入操作按行进行,支持writerow(列表)进行单行写入,以及writerows(嵌套列表)进行多行批量写入。写入完成后无需手动保存,文件会自动更新。

当CSV文件包含标题行时,可先通过header=next(reader)获取第一行数据作为标题,随后遍历剩余的数据行。写入时,可先调用writer.writerow(标题行列表)写入标题,再使用writer.writerows(多行数据嵌套列表)写入主体数据,也可选择逐行写入。

基础读写示例与注意事项

示例数据文件data.csv内容如下:

name,password abc,123456 张五,123#456 张#abc123,123456 666,123456 a b,123456

读取示例代码:


import csv
with open('data.csv', encoding='utf-8') as f:
  reader = csv.reader(f)
  header = next(reader)
  print(header)
  for row in reader:
    print(row)

注意:reader对象必须在文件打开的上下文中使用,若文件关闭后再尝试读取,reader将无法工作。此外,CSV中所有数字均被视为字符串,若需进行数值计算,必须使用int()或float()函数进行显式类型转换。

写入示例代码:


import csv
header = ['name', 'password', 'status']
data = [
  ['abc', '123456', 'PASS'],
  ['张五', '123#456', 'PASS'],
  ['张#abc123', '123456', 'PASS'],
  ['666', '123456', 'PASS'],
  ['a b', '123456', 'PASS']
]
with open('result.csv', 'w', encoding='utf-8', newline='') as f:
  writer = csv.writer(f)
  writer.writerow(header)
  writer.writerows(data)

打开文件时,模式应指定为'w'(文本写入),不支持'wb'(二进制写入)。当然,根据需求也可使用'a'(追加)、'w+'或'r+'等模式。

打开文件时,务必指定参数newline='',否则每写入一行数据后,系统会自动添加额外的换行符,导致输出文件中出现多余的空行。

若希望写入的CSV文件在Excel中打开时不出现中文乱码,可将编码方式从utf-8改为utf-8-sig。

写入结果展示,result.csv文件内容如下:

name,password,status abc,123456,PASS 张五,123#456,PASS 张#abc123,123456,PASS 666,123456,PASS a b,123456,PASS

字典格式数据读写(DictReader/DictWriter)

使用字典格式的数据处理:DictReader与DictWriter

使用字典读写器时,数据文件中必须包含标题行,否则无法正确映射列名。

reader=csv.DictReader(f)可直接将标题行与每一列数据组装为有序字典(OrderedDict)格式,无需单独读取标题行。writer=csv.DictWriter(f, 标题行列表)在写入时,可先调用writer.writeheader()写入标题,随后使用writer.writerow(字典格式数据行)或writer.writerows(多行字典列表)完成写入。

字典读取示例代码:


import csv
with open('data.csv', encoding='utf-8') as f:
  reader = csv.DictReader(f)
  for row in reader:
    print(row['name'], row['password'])

字典写入示例代码:


import csv

header = ['name', 'password', 'status']

data = [
  {'name':'abc', 'password':'123456', 'status':'PASS'},
  {'name':'张五', 'password':'123#456', 'status':'PASS'},
  {'name':'张#abc123', 'password':'123456', 'status':'PASS'},
  {'name':'666', 'password':'123456', 'status':'PASS'},
  {'name':'a b', 'password':'123456', 'status':'PASS'}
]


with open('result2.csv', 'w', encoding='utf-8', newline='') as f:
  writer = csv.DictWriter(f, header)
  writer.writeheader()
  writer.writerows(data)

写入结果与之前的result.csv内容一致。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。