如何使用 Python 读取和写入 CSV 文件?

ops/2024/12/18 9:54:09/

在Python中,处理CSV文件是一项常见的任务,通常用于数据交换和数据存储。

Python的标准库csv模块提供了一种方便的方式来读取和写入CSV文件。

下面我将详细介绍如何使用Python的csv模块来读取和写入CSV文件,并提供一些实际开发中的建议和注意事项。

读取CSV文件

使用csv模块读取CSV文件的基本步骤如下:

  1. 打开CSV文件。
  2. 创建一个csv.reader对象。
  3. 遍历csv.reader对象以读取每一行数据。

以下是一个示例代码:

import csv# 打开CSV文件
with open('example.csv', mode='r', encoding='utf-8') as file:# 创建一个csv.reader对象csv_reader = csv.reader(file)# 遍历每一行数据for row in csv_reader:print(row)
代码解释:
  • open('example.csv', mode='r', encoding='utf-8'):以只读模式打开名为example.csv的文件,并指定编码为UTF-8。
  • csv.reader(file):创建一个csv.reader对象,用于读取文件内容。
  • for row in csv_reader:遍历csv.reader对象,每次迭代返回一行数据,数据以列表形式表示。

写入CSV文件

使用csv模块写入CSV文件的基本步骤如下:

  1. 打开CSV文件。
  2. 创建一个csv.writer对象。
  3. 使用writerowwriterows方法写入数据。

以下是一个示例代码:

import csv# 数据列表
data = [['Name', 'Age', 'City'],['Alice', '30', 'New York'],['Bob', '25', 'Los Angeles']
]# 打开CSV文件
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:# 创建一个csv.writer对象csv_writer = csv.writer(file)# 写入数据for row in data:csv_writer.writerow(row)
代码解释:
  • open('output.csv', mode='w', encoding='utf-8', newline=''):以写入模式打开名为output.csv的文件,并指定编码为UTF-8。newline=''参数用于防止在不同操作系统中出现额外的空行。
  • csv.writer(file):创建一个csv.writer对象,用于写入文件内容。
  • csv_writer.writerow(row):将每一行数据写入CSV文件。

实际开发中的建议和注意事项

  1. 处理特殊字符:CSV文件中的数据可能包含逗号、引号等特殊字符。csv模块会自动处理这些字符,但在读取和写入时仍需注意数据的格式。

  2. 编码问题:在处理CSV文件时,确保文件的编码与代码中指定的编码一致,以避免乱码问题。

  3. 性能考虑:对于大型CSV文件,可以考虑使用pandas库,它提供了更高效的CSV文件处理功能。

  4. 错误处理:在实际开发中,应添加错误处理机制,以应对文件不存在、权限不足等问题。

以下是一个带有错误处理的示例代码:

import csvtry:with open('example.csv', mode='r', encoding='utf-8') as file:csv_reader = csv.reader(file)for row in csv_reader:print(row)
except FileNotFoundError:print("文件未找到")
except PermissionError:print("权限不足,无法读取文件")
except Exception as e:print(f"发生错误: {e}")

高级用法

使用DictReaderDictWriter

csv.DictReaderDictWriter允许你以字典的形式读取和写入CSV文件,这样可以更方便地访问列数据。

以下是一个示例代码:

import csv# 读取CSV文件
with open('example.csv', mode='r', encoding='utf-8') as file:csv_reader = csv.DictReader(file)for row in csv_reader:print(row['Name'], row['Age'], row['City'])# 写入CSV文件
data = [{'Name': 'Alice', 'Age': '30', 'City': 'New York'},{'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]with open('output.csv', mode='w', encoding='utf-8', newline='') as file:fieldnames = ['Name', 'Age', 'City']csv_writer = csv.DictWriter(file, fieldnames=fieldnames)csv_writer.writeheader()for row in data:csv_writer.writerow(row)
代码解释:
  • csv.DictReader(file):创建一个csv.DictReader对象,每一行数据以字典形式表示,键为列名。
  • csv.DictWriter(file, fieldnames=fieldnames):创建一个csv.DictWriter对象,指定列名为fieldnames
  • csv_writer.writeheader():写入列名作为CSV文件的第一行。

使用Python的csv模块可以方便地读取和写入CSV文件。

在实际开发中,应注意处理特殊字符、编码问题、性能考虑和错误处理。对于更复杂的需求,可以考虑使用pandas库来提高处理效率。

通过合理使用csv.DictReadercsv.DictWriter,可以更方便地访问和操作CSV文件中的数据。


http://www.ppmy.cn/ops/142875.html

相关文章

React Native安卓模拟器闪退问题1

今天遇到一个奇葩问题 问题描述:真机执行开发调试正常,使用Android模拟器的时候发现app启动时闪退,在logcat里的error信息如下 Fatal signal 6 (SIGABRT), code 0 (SI_USER) in tid 22732 (FlipperEventBas), pid 22700 通义灵码的解释是有…

Python `__slots__` 进阶指南:不止于节省内存,从原理到实践

相信不少 Python 开发者都听说过 __slots__,知道它可以帮助节省内存。但你是否思考过它背后的原理,以及在实际开发中的其他妙用?让我们一起深入探讨。 从一个性能问题说起 假设你的一个系统需要处理大量的订单对象: class Orde…

安装 telnet

参考链接 https://www.python100.com/html/80855.html Linux telnet 命令安装_failed to start telnet.service: unit not found.-CSDN博客 解决启动的问题,出问题优先看这个 安装telnet服务,以及遇到的一些坑_unit telnet.service could not be fou…

leetcode简单题数组和技巧题

数组是一种基础数据结构,可以用来处理常见的排序和二分搜索问题,典型的处理技巧包括对撞指针、滑动窗口等。 面试中的算法问题,有很多并不需要复杂的数据结构支撑,就是用数组,就能考察出很多东西。 题型1:…

6.1 初探MapReduce

MapReduce是一种分布式计算框架,用于处理大规模数据集。其核心思想是“分而治之”,通过Map阶段将任务分解为多个简单任务并行处理,然后在Reduce阶段汇总结果。MapReduce编程模型包括Map和Reduce两个阶段,数据来源和结果存储通常在…

golang 判断一个点是否在一个多边形内

我有一需求为:判断一个点(经纬度范围)是否在一个多边形范围内(多个经纬度点) 这里我借助几何库( github.com/paulmach/orb)来处理地理空间数据 可以通过在线获取经纬度来确认代码正确性 packa…

开源 AI 智能名片微信小程序在企业微信生态中的创新应用与价值拓展

摘要:本论文聚焦于企业微信这一重要的企业通信与办公工具,深入探讨开源 AI 智能名片微信小程序如何与之深度融合并发挥独特作用。分析企业微信的功能特性以及在企业内外连接方面的重要意义,阐述开源 AI 智能名片微信小程序在增强企业社交互动…

国际网络专线是什么?有什么优势?

国际网络专线作为一种独立的网络连接方式,通过卫星或海底光缆等物理链路,将全球不同国家和地区的网络直接互联,为企业提供了可靠的通信渠道。本文将详细探讨国际网络专线的优势以及其广泛的应用场景。 国际网络专线的优势解析 1. 专属连接&am…