在 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 文件