Python读写csv文件流程及异常解决

  • Post category:Python

Python读写CSV文件流程及异常解决

CSV(Comma-Separated Values)是一种通用的文件格式,可用于在不同的应用程序之间共享数据。Python提供了CSV模块来读写CSV文件,下面我们来详细讲解Python读写CSV文件的流程。

1. 导入CSV模块

Python的CSV模块内置于标准库中,所以不需要额外安装。可以通过以下代码导入CSV模块:

import csv

2. 读取CSV文件

CSV文件是由行和列组成的表格数据,可以使用csv.reader()方法读取CSV文件。下面是读取CSV文件的基本流程:

import csv

# 打开CSV文件
with open('employee.csv', newline='') as csvfile:
    # 读取CSV文件内容
    reader = csv.reader(csvfile)
    # 遍历CSV文件中的每一行
    for row in reader:
        print(row)

在打开CSV文件时,需要指定newline=”参数,来确保每行数据能够正确读取。读取CSV文件后,通过for循环遍历每一行数据,打印出每一行的内容。

3. 写入CSV文件

Python的CSV模块也提供了写入CSV文件的功能。下面是写入CSV文件的基本流程:

import csv

# 创建CSV文件
with open('employee.csv', mode='w', newline='') as csvfile:
    # 写入CSV文件内容
    writer = csv.writer(csvfile)
    writer.writerow(['Name', 'Age', 'Department'])
    writer.writerow(['Lucy', '28', 'Sales'])
    writer.writerow(['Tom', '35', 'Marketing'])

在创建CSV文件时,先指定文件名和打开模式。打开模式中,mode=’w’表示创建一个新的CSV文件,如果文件已经存在,则会覆盖掉原有的文件内容。写入CSV文件的数据可以通过writerow()方法实现。在这个例子中,我们写入了三行数据,包括姓名、年龄和部门信息。

4. 异常解决

使用CSV模块时,可能会遇到一些异常情况,需要通过异常处理来解决。例如,当CSV文件不存在时,会引发FileNotFoundError异常。下面是如何处理这种异常:

import csv

try:
    # 打开CSV文件
    with open('employee.csv', newline='') as csvfile:
        # 读取CSV文件内容
        reader = csv.reader(csvfile)
        # 遍历CSV文件中的每一行
        for row in reader:
            print(row)
except FileNotFoundError:
    print('The CSV file does not exist.')

在这个例子中,我们使用try…except语句来捕获可能发生的异常。如果CSV文件不存在,则会抛出FileNotFoundError异常,我们通过except语句来捕获并打印出异常信息。

示例说明

下面我们提供两个例子来说明CSV模块的使用方法。

例子1:分析球员数据

假设有一个CSV文件,存储了多个篮球球员的数据,包括姓名、年龄、身高和得分。我们可以使用CSV模块来读取这个文件,并对球员数据进行分析。

import csv

# 定义球员类
class Player:
    def __init__(self, name, age, height, score):
        self.name = name
        self.age = age
        self.height = height
        self.score = score

# 读取CSV文件,并解析数据
players = []
with open('players.csv', newline='') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        name, age, height, score = tuple(row)
        player = Player(name, int(age), int(height), int(score))
        players.append(player)

# 对球员数据进行分析
total_height = 0
max_score_player = players[0]
for player in players:
    total_height += player.height
    if player.score > max_score_player.score:
        max_score_player = player

print('Average height:', total_height / len(players))
print('The player with the highest score:', max_score_player.name)

在这个例子中,我们读取了一个名为players.csv的CSV文件,并将每个球员的数据解析为Python对象。然后,我们对球员数据进行了分析,计算出球员的平均身高,并找出得分最高的球员。

例子2:导出用户订单数据

假设有一个在线商店的订单系统,订单数据存储在MySQL数据库中。我们需要导出订单数据,并保存为CSV文件格式,以便与其他应用程序共享数据。

import csv
import mysql.connector

# 连接MySQL数据库
mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

# 查询订单数据
mycursor = mydb.cursor()
mycursor.execute("SELECT * FROM orders")

# 导出订单数据到CSV文件
with open('orders.csv', mode='w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    # 写入CSV文件标题
    writer.writerow(['Order ID', 'Customer Name', 'Product Name', 'Order Date'])
    # 遍历订单数据,并写入CSV文件
    for row in mycursor:
        writer.writerow(row)

# 关闭MySQL数据库连接
mydb.close()

在这个例子中,我们使用mysql.connector模块连接到MySQL数据库,并查询出订单数据。然后,我们使用CSV模块将查询结果导出为CSV文件。注意,我们使用writerow()方法来先写入CSV文件的标题,然后遍历每一行数据,并将其写入CSV文件中。

这两个例子只是CSV模块使用的冰山一角,通过它们我们可以掌握CSV模块的基本使用方法并了解如何解决可能遇到的异常情况。