当前位置: 首页 > news >正文

浅析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文件更简洁。


💡 注意事项与常见问题

  1. 编码问题:处理CSV文件时,务必指定正确的编码格式(如utf-8gbk等),避免出现中文乱码。
  2. 分隔符问题:部分CSV文件可能使用制表符、分号等作为分隔符,此时可以在csv.readercsv.writer中通过delimiter参数指定,例如csv.reader(file, delimiter='\t')
  3. 数据类型转换:使用csv模块读取的数据默认都是字符串类型,需要手动转换为整数、浮点数等类型;而pandas会自动识别大部分数据类型。
  4. 大文件处理:对于超大CSV文件,建议使用csv模块的逐行读取方式,或者pandas的chunksize参数分块读取,避免内存溢出。
  5. 源码分享网:https://svipm.com.cn(描述:上千款各行各业的源码)
http://www.cnnetsun.cn/news/1519587.html

相关文章:

  • nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测
  • 4个步骤掌握MaterialDesignInXamlToolkit:打造专业级WPF界面设计
  • 终极指南:如何用uesave轻松编辑虚幻引擎游戏存档
  • Hyper-V 管理工具:提升虚拟化效率的关键利器
  • FCL库实战:用C++写一个机器人避障仿真中的碰撞检测Demo
  • ArcGIS实战:从零到一打造一份专业级专题地图
  • QOM 设备模型
  • 终极指南:3种技术方案彻底解决IDM激活弹窗问题
  • AI视频生成不求人:ANIMATEDIFF PRO全流程解析,效果惊艳
  • 告别电机抖动!用SimpleFOC库给STM32F405无刷电机做霍尔校准的保姆级避坑指南
  • 2026 论文急救指南:10 款 AI 毕业论文工具实测,Paperxie 领衔搞定初稿到答辩
  • GameFrameWork框架(Unity3D)实战指南:从AssetBundle配置到热更新发布
  • 如何用3步实现网页双语对照翻译?开源翻译工具KISS Translator全攻略
  • 每日一题:请解释 .NET中的内存模型是什么
  • FedMeta: Accelerating Federated Learning with Meta-Learning for Enhanced Privacy and Efficiency
  • 寻音捉影·侠客行多场景落地:覆盖会议/媒体/司法/金融/教育五大垂直领域
  • 指针式仪表智能读数:Python视觉检测完整实战指南
  • G-Helper终极指南:华硕笔记本性能管理的轻量级解决方案
  • 拆解小米手机:从Mi到POCO,内部硬件大揭秘
  • 遗传算法-交叉算子实战:从单点到循环的优化策略
  • 老旧电脑也能流畅运行3D应用?DXVK让Direct3D性能提升的秘密
  • QEMU虚拟SD卡实战:如何给uboot传递内核参数?以vexpress-a9开发板为例
  • OpenClaw智能搜索:GLM-4.7-Flash增强的本地文件检索系统
  • LiteLLM + Claude Code 双窗口启动脚本
  • Vivado中include与import常见报错解析与实战解决方案
  • 短信营销API接口参考文档:涵盖字段定义、鉴权流程与多语言开发包
  • OpenClaw多通道通知:百川2-13B任务结果同时推送邮件与飞书
  • TCP 1
  • 掌握 AgentScope 与 Spring AI Alibaba:大模型多智能体实践指南(收藏版)
  • 如何快速掌握League-Toolkit:面向英雄联盟玩家的终极工具集完整指南