Python3操作读写CSV文件使用包过程解析
本文详解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内容一致。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









