在 Python 中逐行读取 CSV
在 Python 中,读取文件并按列打印是很常见的。但是有时逐行读取文件可能会有点混乱。
本文将介绍如何在 Python 中逐行读取 CSV 文件。我们将使用 Python csv
模块来处理 Python 中的 CSV 文件。
在逐行读取 CSV 文件之前,让我们先看一下 CSV 文件的文件格式。这将帮助我们以更好的方式操作 CSV 文件。
CSV 文件的文件结构
CSV
代表逗号分隔值
;它是一种将数据存储在表中的简单文件格式。这些表格可以是电子表格或数据库的形式。
我们还可以在简单的文本编辑器(如记事本
)中制作 CSV 文件。每个 CSV 文件行对应表的一条记录。
此外,每条记录都有一个或多个字段。字段和记录的横截面称为单元格。这些字段由逗号 (,
) 分隔。
有时,我们也将此逗号称为分隔符。请注意,此格式的名称来自使用逗号作为字段分隔符。CSV 文件因其与许多程序、数据库、电子表格和文字处理软件的兼容性而被广泛使用。
现在让我们使用上述文件结构创建一个 CSV 文件。创建文件后,我们将使用不同的函数逐行读取 CSV 文件。
我们可以使用 Microsoft Excel 中的电子表格创建 CSV 文件。但是,如果你的系统中没有安装 Microsoft Excel,你可以使用记事本或其他文本编辑器来制作 CSV 文件。
我们可以将文件扩展名更改为 .csv
来执行此操作。另外,不要忘记遵循 CSV 文件的格式。这是我们需要执行的所有步骤。
-
打开文本编辑器并以正确的 CSV 格式编写内容。标题以及记录以逗号分隔。每条记录都以新行开始。如下所示:
Roll Number,Name,Subject 1,Harry Potter,Magical Creatures 2,Ron Weasley,Divination 3,Hermione Granger,Dark arts
将此文件另存为 Demo.csv
。CSV 文件将成功创建。
我们可以使用 open()
函数在 Python 中打开 CSV 文件。但是,我们更喜欢使用专门为此目的制作的 python csv 模块。要使用 csv 模块,我们必须先导入它。
import csv
我们将使用我们已经创建的 Demo.csv
文件进行演示。该文件如下所示:
Roll Number,Name,Subject
1,Harry Potter,Magical Creatures
2,Ron Weasely,Divination
3,Hermione Granger,Dark arts
为了在 Python 中逐行读取这个 CSV 的内容,我们将使用 csv 模块,该模块进一步提供了两个类。这些类是 csv.reader
和 csv.DictReader
。
让我们一一来看这些类。
在 Python 中使用 csv.reader
逐行读取 CSV 文件
csv 模块的 csv.reader
类使我们能够读取和迭代 CSV 文件中的行作为值列表。看下面的例子:
from csv import reader
# open file
with open("Demo.csv", "r") as my_file:
# pass the file object to reader()
file_reader = reader(my_file)
# do this for all the rows
for i in file_reader:
# print the rows
print(i)
我们使用 reader 对象来遍历 Demo.csv
文件的行。reader 对象充当迭代器。这样可以确保一次只有一行留在内存中。
输出:
['Roll Number', 'Name', 'Subject']
['1', 'Harry Potter', 'Magical Creatures']
['2', 'Ron Weasley', 'Divination']
['3', 'Hermione Granger', 'Dark arts']
让我们看看这里使用的函数。
Python 的 open()
函数用于打开文件。一旦它打开一个文件,它就会返回一个文件对象。
语法:
open(file_name, mode)
参数 mode
指定我们要打开文件的模式。它可以是 read
、append
、write
或 create
。
reader()
函数用于读取文件。它返回一个可迭代的阅读器对象。在上面的例子中,这个可迭代的对象是 file_reader
,从 for 循环的使用中必须清楚。
在上面的示例中,还打印了标题。我们也可以打印没有标题的 CSV 文件。看下面的例子:
from csv import reader
# skip the first line(the header)
with open('Demo.csv', 'r') as my_file:
file_csv = reader(my_file)
head = next(file_csv)
# check if the file is empty or not
if head is not None:
# Iterate over each row
for i in file_csv:
# print the rows
print(i)
输出:
['1', 'Harry Potter', 'Magical Creatures']
['2', 'Ron Weasley', 'Divination']
['3', 'Hermione Granger', 'Dark arts']
此处不打印标题。这种方法的工作原理与前一种方法类似,只是我们在迭代期间跳过了第一行。我们使用了 next()
函数来跳过标题。
Python 中的 next()
函数返回迭代器中存在的下一项。其语法如下所述。
语法:
next(iterable_object/iterable, default)
Iterable
或 iterable object
是我们必须迭代的一组值。default
是一个可选参数,如果 iterable 到达其末尾,则它会返回该参数。
在 Python 中使用 DictReader
对象逐行读取 CSV 文件
csv.reader
读取并打印 CSV 文件作为列表。
但是,DictReader
对象将 CSV 文件的行作为字典进行迭代。csv.reader
将每一行作为列表返回,ObjectReader
将每一行作为字典返回。
看下面的例子:
from csv import DictReader
#open the file
with open('Demo.csv', 'r') as my_file:
#passing file object to DictReader()
csv_dict_reader = DictReader(my_file)
#iterating over each row
for i in csv_dict_reader:
#print the values
print(i)
输出:
{'Roll Number': '1', 'Name': 'Harry Potter', 'Subject': 'Magical Creatures'}
{'Roll Number': '2', 'Name': 'Ron Weasley', 'Subject': 'Divinition'}
{'Roll Number': '3', 'Name': 'Hermione Granger', 'Subject': 'Dark arts'}
DictReader
函数类似于 reader
函数,不同之处在于它返回信息的方式。它将值映射并返回为字典
,其中字段名称充当字典的键,值由特定行中的数据组成。
结论
在本文中,我们讨论了 CSV 的基础知识。我们还看到了在 Python 中逐行读取 CSV 的两种方法。我们还了解了如何使用记事本等文本编辑器自行创建 CSV 文件。
相关文章 - Python CSV
- Python 逐行写入 CSV
- 使用 Python 将 XML 转换为 CSV
- 在 Python 中将列表写入 CSV 列
- 在 Python 中读取带有标题的 CSV
- 在 Python 中合并 CSV 文件