Python 3.x 中如何使用csv模块读取和写入CSV文件

引言

CSV文件是一种被广泛应用于数据交换的简单文本文件格式。如果使用Python来处理数据,CSV文件是一个非常常见的文件格式。在Python中,CSV文件可以使用csv模块轻松读取和写入。

如何读取CSV文件

使用csv模块读取CSV文件非常简单。下面是一个示例代码:

import csv

with open('example.csv', 'r') as csv_file:

csv_reader = csv.reader(csv_file)

for row in csv_reader:

print(row)

在这段代码中,我们首先导入了csv模块。然后我们打开CSV文件,并将其赋值给csv_file变量。我们使用with语句来确保在读取完文件后文件会被正确关闭。

然后我们创建了一个csv_reader对象,使用csv.reader()函数来将csv_file文件对象传递到该函数中。csv_reader对象将用于迭代CSV文件行,并将每行作为列表返回,其中包含CSV文件中每个单元格的值。

最后我们使用for循环迭代csv_reader对象,并将每行列表打印到控制台上。

读取CSV文件中的特定行和列

如果您只想读取CSV文件中的特定行和列,csv模块也提供了几种方法来实现这一点。下面是一个示例代码:

import csv

with open('example.csv', 'r') as csv_file:

csv_reader = csv.reader(csv_file)

for row in csv_reader:

print(row[0]) # 打印第一列

print(row[1]) # 打印第二列

在这个示例中,我们简单地使用行列表中的索引号来访问和打印CSV文件中特定列的数据。

如何写入CSV文件

使用csv模块写入CSV文件非常简单。下面是一个示例代码:

import csv

with open('example.csv', 'w', newline='') as csv_file:

csv_writer = csv.writer(csv_file)

csv_writer.writerow(['Name', 'Age', 'Address']) # 写入表头

csv_writer.writerow(['Alice', '25', 'New York']) # 写入第一行数据

csv_writer.writerow(['Bob', '30', 'San Francisco']) # 写入第二行数据

在这段代码中,我们首先打开一个文件名为example.csv的文件。我们使用with语句来确保在写入完文件后文件会被正确关闭。我们使用w模式来告诉Python该文件应该打开用于写入数据。

然后我们创建了一个csv_writer对象,使用csv.writer()函数将csv_file文件对象传递到它的构造函数中。这个对象将用于写入数据到CSV文件中。

接着,我们使用csv_writer.writerow()函数来将CSV行写入CSV文件。我们将字符串列表传递给该函数,列表中的每个字符串将成为CSV文件中的一个单元格。在这个示例中,我们首先使用一个列表来写入文件表头,然后写入两行数据,每一行所含的字符串都对应于文件中的一行。

如何将字典写入CSV文件

有时候,我们可能需要将一个字典写入CSV文件中,而不是手动将它们转换为字符串列表。csv模块也提供了一种非常简单的方式来实现这一点。下面是一个示例代码:

import csv

with open('example.csv', 'w', newline='') as csv_file:

fieldnames = ['Name', 'Age', 'Address']

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

writer.writeheader() # 写入表头

writer.writerow({'Name': 'Alice', 'Age': '25', 'Address': 'New York'})

writer.writerow({'Name': 'Bob', 'Age': '30', 'Address': 'San Francisco'})

在这种情况下,我们首先创建一个包含所有字段名称的列表,叫做fieldnames。然后我们创建一个csv.DictWriter对象,并将文件对象和fieldnames列表作为参数传递给它的构造函数。通过这个对象,我们可以将字典中的数据写成CSV文件。

接着,我们调用writer.writeheader()函数写入CSV文件的标题行。最后,我们使用writer.writerow()函数将每个字典行写入CSV文件。

如何处理CSV文件中的空值和非ASCII字符

在实际处理CSV文件时,常常会遇到一些挑战,比如空值和非ASCII字符。csv模块提供了一些方法来帮助我们解决这些问题。

如何处理CSV文件中的空值

当CSV文件中某些单元格为空值时,csv模块会将它们解释为包含空字符串的单元格。为了处理这种情况,我们可以使用csv模块中的csv.QUOTE_NONNUMERIC选项来将空值替换为类似于NaN这样的值。下面是一个处理空值的示例:

import csv

with open('example.csv', 'r') as csv_file:

csv_reader = csv.reader(csv_file, quoting=csv.QUOTE_NONNUMERIC)

for row in csv_reader:

if None in row:

row = [float('nan') if val is None else val for val in row]

print(row)

在这段代码中,我们在csv.reader()函数中添加了一个quoting参数,并将其设置为csv.QUOTE_NONNUMERIC。这将告诉csv模块将空字符串替换为类似于NaN这样的值。

如果我们在处理数据时需要对这些NaN值进行一些特殊处理,则可以使用Python的浮点nan值来代替CSV文件中的空值。在这个示例中,我们使用一个简单的列表推导来将每个None值转换为float('nan')值,并将该列表作为csv_reader迭代器的一部分。

如何处理CSV文件中的非ASCII字符

当CSV文件中包含非ASCII字符时,csv模块可能会出现异常。为了避免这种情况,我们可以指定文件的编码方式来处理这些字符。

import csv

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

csv_reader = csv.reader(csv_file)

for row in csv_reader:

print(row)

在这段代码中,我们在打开文件时使用了encoding参数,并将其设置为'utf-8'字符编码方式。在Python中,'utf-8'是一种通用的字符编码方式,可以处理包含非ASCII字符的文件。

结论

本文介绍了如何使用Python的csv模块读取和写入CSV文件。我们看到了如何使用csv.reader()和csv.writer()函数来读写CSV文件。我们还介绍了如何处理CSV文件中的空值和非ASCII字符。csv模块为Python程序员提供了一个强大的工具,可以轻松地处理CSV文件。因此,如果您需要处理CSV文件,不妨试试Python的csv模块吧!

后端开发标签