在 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