浅析Python中CSV文件的读取与写入
在日常Python开发中,CSV(逗号分隔值)文件是一种极为常见的数据交换格式,它结构简单、可读性强,广泛应用于数据导出、报表生成、批量数据处理等场景。今天就来系统梳理一下Python中CSV文件的读取与写入方法,帮助大家高效处理这类文件。
📥 CSV文件的读取
Python处理CSV文件主要有两种方式:使用内置的csv模块,或者借助更强大的第三方库pandas。
1. 内置csv模块基础读取
csv模块是Python自带的标准库,无需额外安装,适合处理基础的CSV文件读取需求。
Python
复制
import csv # 基础读取方式 with open('data.csv', 'r', encoding='utf-8') as file: # 创建CSV读取对象 csv_reader = csv.reader(file) # 遍历每一行数据 for row in csv_reader: print(row)
这种方式会将每一行数据转换为一个列表,列表中的每个元素对应CSV文件中的一列。如果CSV文件包含表头,还可以通过next()方法单独读取表头:
Python
复制
import csv with open('data.csv', 'r', encoding='utf-8') as file: csv_reader = csv.reader(file) # 读取表头 header = next(csv_reader) print("表头:", header) # 读取数据行 for row in csv_reader: print(row)
2. 更灵活的字典读取
如果希望直接通过列名(表头)访问数据,可以使用csv.DictReader:
Python
复制
import csv with open('data.csv', 'r', encoding='utf-8') as file: # 创建字典读取对象,自动将第一行作为表头 csv_dict_reader = csv.DictReader(file) for row in csv_dict_reader: # 通过列名访问对应数据 print("姓名:", row['姓名'], "年龄:", row['年龄'])
3. pandas库高效读取
对于数据量较大或需要复杂数据处理的场景,pandas库的读取效率和便捷性更具优势:
Python
复制
import pandas as pd # 读取CSV文件为DataFrame对象 df = pd.read_csv('data.csv') # 查看前5行数据 print(df.head()) # 查看数据基本信息 print(df.info())
pandas会自动识别表头,将数据转换为结构化的DataFrame,支持直接进行数据筛选、统计、可视化等操作。
📤 CSV文件的写入
同样,写入CSV文件也可以通过csv模块和pandas库实现。
1. 内置csv模块基础写入
使用csv.writer可以将列表数据写入CSV文件:
Python
复制
import csv # 待写入的数据 data = [ ['姓名', '年龄', '城市'], ['张三', 25, '北京'], ['李四', 30, '上海'], ['王五', 28, '广州'] ] with open('output.csv', 'w', encoding='utf-8', newline='') as file: # 创建CSV写入对象 csv_writer = csv.writer(file) # 写入所有数据 csv_writer.writerows(data)
注意添加newline=''参数可以避免写入时出现空行。如果需要逐行写入,可以使用writerow()方法:
Python
复制
import csv with open('output.csv', 'w', encoding='utf-8', newline='') as file: csv_writer = csv.writer(file) # 写入表头 csv_writer.writerow(['姓名', '年龄', '城市']) # 逐行写入数据 csv_writer.writerow(['张三', 25, '北京']) csv_writer.writerow(['李四', 30, '上海'])
2. 字典格式数据写入
如果数据是以字典形式存储的,可以使用csv.DictWriter,指定表头后直接写入字典数据:
Python
复制
import csv # 待写入的字典数据 data = [ {'姓名': '张三', '年龄': 25, '城市': '北京'}, {'姓名': '李四', '年龄': 30, '城市': '上海'}, {'姓名': '王五', '年龄': 28, '城市': '广州'} ] # 定义表头 header = ['姓名', '年龄', '城市'] with open('dict_output.csv', 'w', encoding='utf-8', newline='') as file: # 创建字典写入对象 csv_dict_writer = csv.DictWriter(file, fieldnames=header) # 写入表头 csv_dict_writer.writeheader() # 写入所有数据 csv_dict_writer.writerows(data)
3. pandas库高效写入
pandas写入CSV文件同样简单,只需调用DataFrame的to_csv()方法:
Python
复制
import pandas as pd # 创建DataFrame数据 data = { '姓名': ['张三', '李四', '王五'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州'] } df = pd.DataFrame(data) # 写入CSV文件 df.to_csv('pandas_output.csv', index=False, encoding='utf-8')
index=False参数用于避免写入自动生成的行索引,让输出的CSV文件更简洁。
💡 注意事项与常见问题
- 编码问题:处理CSV文件时,务必指定正确的编码格式(如
utf-8、gbk等),避免出现中文乱码。 - 分隔符问题:部分CSV文件可能使用制表符、分号等作为分隔符,此时可以在
csv.reader或csv.writer中通过delimiter参数指定,例如csv.reader(file, delimiter='\t')。 - 数据类型转换:使用
csv模块读取的数据默认都是字符串类型,需要手动转换为整数、浮点数等类型;而pandas会自动识别大部分数据类型。 - 大文件处理:对于超大CSV文件,建议使用
csv模块的逐行读取方式,或者pandas的chunksize参数分块读取,避免内存溢出。 - 源码分享网:https://svipm.com.cn(描述:上千款各行各业的源码)
