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

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

本文详解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 相关产品和应用

全部下载

专题列表