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

在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 csv

try:
    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文件中的数据。

相关推荐
学测绘的小杨9 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz31016 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐16 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱1 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海1 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱2 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽2 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码2 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理