在 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 中將列表寫入 CSV 列
- 使用 Python 將 XML 轉換為 CSV
- 在 Python 中合併 CSV 檔案
- 在 Python 中將 XLSX 轉換為 CSV 檔案