Python中csv模块的基本使用教程

1. 简介

CSV(Comma-Separated Values)是一种常用于传输表格型数据的简单文件格式。Python中的csv模块提供了对CSV文件的读写操作,方便我们进行数据的处理。

本文将介绍Python中csv模块的基本使用方法,包括读取CSV文件、写入CSV文件、处理CSV文件中的数据等内容。

2. 读取CSV文件

导入csv模块后,可以使用csv.reader方法来读取CSV文件。该方法返回一个可迭代的reader对象,可以使用for循环逐行读取文件中的内容。

2.1 打开文件

在读取CSV文件之前,需要先打开文件,并指定打开方式和编码方式。

with open('data.csv', 'r', encoding='utf-8') as f:

# 在此处进行读取操作

在上面的代码中,我们使用了with语句来打开CSV文件,并将文件对象赋值给变量f。with语句可以自动关闭文件,避免因文件流未关闭而导致的问题。

在open函数的第一个参数中,我们指定了文件的名称(或路径)。在这个例子中,我们假设CSV文件与Python脚本文件在同一目录下,并且文件名为"data.csv"。

在打开文件的第二个参数中,我们指定了打开方式。这里我们使用'r'表示读取模式。如果要写入文件,则可以使用'w'表示写入模式。

在打开文件的第三个参数中,我们指定了文件的编码方式。这里我们使用utf-8编码方式。编码方式的选择取决于你的文件中包含的字符集,如果文件中包含了其他字符集,则需要选择相应的编码方式。

2.2 读取数据

读取CSV文件的方法非常简单,只需要使用csv.reader方法即可。

import csv

with open('data.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

for row in reader:

print(row)

在上面的代码中,我们使用csv.reader方法创建了一个reader对象,然后使用for循环遍历该对象。reader对象可以逐行读取CSV文件中的内容,每行数据将被作为一个列表返回。在循环中,我们使用print语句输出每一行的数据。

如果CSV文件中包含表头,则可以使用next方法跳过表头。

import csv

with open('data.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

# 跳过表头

next(reader)

for row in reader:

print(row)

2.3 读取指定行

有时我们只需要读取CSV文件中的某些行,可以使用for循环遍历reader对象时增加一个计数器,根据计数器的值来判断是否需要读取该行数据。

import csv

with open('data.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

# 读取前5行数据

for i, row in enumerate(reader):

if i < 5:

print(row)

else:

break

上面的代码中,我们使用enumerate函数来获取每一行数据的序号i和行数据row。在for循环中,我们增加了if语句来判断序号是否小于5,如果是,则输出该行数据,否则退出循环。

2.4 指定分隔符和引号字符

在读取CSV文件时,有时候可能需要指定分隔符和引号字符。可以在csv.reader方法中使用delimiter和quotechar参数指定分隔符和引号字符。

import csv

with open('data.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f, delimiter='|', quotechar='"')

for row in reader:

print(row)

在上面的代码中,我们使用delimiter参数指定分隔符为'|',使用quotechar参数指定引号字符为'"'。这样就可以正确读取CSV文件中的数据了。

3. 写入CSV文件

在Python中,写入CSV文件也非常简单,只需要使用csv.writer方法即可。使用csv.writer方法创建一个writer对象后,可以使用writerow方法逐行写入数据。

3.1 创建writer对象

在写入CSV文件之前,需要先创建writer对象,并指定输出文件、分隔符和引号字符。

import csv

with open('output.csv', 'w', encoding='utf-8') as f:

writer = csv.writer(f, delimiter=',', quotechar='"')

# 在此处进行写入操作

在上面的代码中,我们使用with语句打开输出CSV文件,并将文件对象赋值给变量f。然后使用csv.writer方法创建一个writer对象,并将该对象命名为writer。创建writer对象时,我们指定了输出文件、分隔符和引号字符。在这个例子中,我们打算将数据写入output.csv文件中,并使用逗号作为分隔符,双引号作为引号字符。

3.2 写入数据

创建writer对象后,就可以使用writerow方法逐行写入数据了。

import csv

with open('output.csv', 'w', encoding='utf-8') as f:

writer = csv.writer(f)

writer.writerow(['name', 'age', 'gender'])

writer.writerow(['张三', '20', '男'])

writer.writerow(['李四', '21', '女'])

writer.writerow(['王五', '22', '男'])

在上面的代码中,我们使用writerow方法逐行写入数据。每次调用writerow方法时,传入一个列表作为参数,该列表中的每个元素将被作为一列数据写入CSV文件中。

3.3 写入字典数据

有时我们需要将字典数据写入CSV文件,可以使用csv.DictWriter方法来处理。

import csv

with open('output.csv', 'w', encoding='utf-8') as f:

fieldnames = ['name', 'age', 'gender']

writer = csv.DictWriter(f, fieldnames=fieldnames)

writer.writeheader()

writer.writerow({'name': '张三', 'age': '20', 'gender': '男'})

writer.writerow({'name': '李四', 'age': '21', 'gender': '女'})

writer.writerow({'name': '王五', 'age': '22', 'gender': '男'})

在上面的代码中,我们首先指定了输出CSV文件的列名,然后使用csv.DictWriter方法创建一个writer对象。在调用writerow方法时,需要传入一个字典作为参数,该字典中的键将与列名相匹配,将对应的值写入CSV文件中。

注意,在使用csv.DictWriter方法时,需要先调用writeheader方法写入表头,否则在写入文件时将无法正确写入列名。

4. 处理CSV文件中的数据

在实际场景中,CSV文件中的数据往往需要进行处理,例如筛选、转换数据类型等操作。在Python中,可以使用一些简单的代码来处理CSV文件中的数据。

4.1 筛选数据

在读取CSV文件后,可以使用条件语句来筛选符合条件的数据。

import csv

with open('data.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

# 筛选age在20岁以下的数据

for row in reader:

if int(row[1]) <= 20:

print(row)

在上面的代码中,我们使用int函数将第二列数据(age)从字符串转换为整数,并使用条件语句筛选出符合条件的数据。

4.2 转换数据类型

在读取CSV文件后,可以使用Python内置的函数将数据类型进行转换。

import csv

with open('data.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

# 转换数据类型

for row in reader:

row[1] = int(row[1])

row[2] = bool(row[2])

在上面的代码中,我们使用int函数将第二列数据(age)从字符串转换为整型数据,并使用bool函数将第三列数据(is_male)从字符串转换为布尔型数据。

4.3 操作数据

在读取CSV文件后,可以使用Python内置的函数对数据进行操作。

import csv

with open('data.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

# 计算平均年龄

total_age = 0

count = 0

for row in reader:

total_age += int(row[1])

count += 1

average_age = total_age / count

print(average_age)

在上面的代码中,我们计算了CSV文件中所有人的平均年龄。在for循环中,我们先将所有人的年龄相加,再计算平均年龄。

5. 总结

CSV文件是一种常见的数据交换格式,Python中csv模块提供了便捷的读写CSV文件的方法,使用方法也非常简单。在读取CSV文件时,可以使用csv.reader方法获取reader对象,并使用for循环逐行读取文件中的内容。在写入CSV文件时,可以使用csv.writer方法创建writer对象,并使用writerow方法逐行写入数据。在数据处理过程中,可以使用Python内置的函数来对数据进行筛选、转换和操作等操作。

后端开发标签