在 Python 中逐行读取 CSV

Shikha Chaudhary 2023年1月30日
  1. CSV 文件的文件结构
  2. 在 Python 中使用 csv.reader 逐行读取 CSV 文件
  3. 在 Python 中使用 DictReader 对象逐行读取 CSV 文件
  4. 结论
在 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.readercsv.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 指定我们要打开文件的模式。它可以是 readappendwritecreate

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)

Iterableiterable 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 File