Skip to content

[Python] 使用 csv 套件讀取 csv 檔案

Last Updated on 2021-05-12 by Clay

CSV 檔,為著名的『逗號分隔值』(Comma-Separated Values, CSV),是一種非常方便顯示資料的格式,是以『純文字』來儲存表格資料的表現型態。

而著名的文書處理軟體 Excel,其最常見的兩種副檔名,一種是 xlsx、另一種則就是 csv 了。而 csv 『逗號分隔值』的意思,也許光看解說還不好懂,接下來我們直接看個例子。

以上是我隨便創的一個 csv 檔,使用 Excel 開啟的模樣。現在我改用 Notepad++ 開啟。

我們可以看到,文字和數字之間只有用一個 “,” 分隔開來,作為不同行的資料。這樣一來,有沒有稍微明白何謂『逗號分隔值』了呢?

那麼以下,我將紀錄如何使用 Python 來讀寫 csv 檔。這在各種資料分析的領域都是不可或缺的技能之一。


讀寫 CSV 檔

在這裡,我們以 IMDB 資料集作為範例。 IMDB 是一個經典的電影評論資料集,常用來測試分類模型的好壞(因為有標籤『正面』和『負面』兩種)。

我們可以在這裡下載 IMDB 資料集: https://www.kaggle.com/lakshmi25npathi/imdb-dataset-of-50k-movie-reviews/download

下載好後解壓縮,我們應該會得到 IMDB 的 CSV 檔。在這裡,我把它重新命名叫 imdb.csv。

讀取方式非常簡單:

# -*- coding: utf-8 -*-
import csv

with open('imdb.csv', newline='', encoding='utf-8') as csvfile:
    rows = csv.reader(csvfile)
    for row in rows:
        print(row)



Output 的東西實在太多了,在這裡我就先不列出了,各位可以看看印出的東西。基本上一個 row 裡頭有兩個元素,前者是電影評論、後者是標正面或負面的標籤。

除了這樣的讀法之外,其實我們也可以使用每一行開頭的名稱來印出資料。

這裡簡單示範一下,基本上兩大類別分別為 review 以及 sentiment。

# -*- coding: utf-8 -*-
import csv

with open('imdb.csv', newline='', encoding='utf-8') as csvfile:
    rows = csv.DictReader(csvfile)
    for row in rows:
        print(row['sentiment'])



這裡的話,我們只選擇印出 sentiment 的部份,所以我們的 Output 只會看到 positive 以及 negative 兩類。

讀取之後,我們來看看該如何寫入。

# -*- coding: utf-8 -*-
import csv

with open('test.csv', 'w', newline='', encoding='utf-8') as csvfile:
    rows = csv.writer(csvfile)
    rows.writerow(['Today', 'is', 'a', 'nice', 'day', '.'])
    rows.writerow(['Today', 'is', 'a', 'bad', 'day', '.'])



Output:

其實非常簡單。


補充

如果要將資料整理成 csv 檔的話,其實正如前面所說, csv 其實只是『逗號分隔值』而已。這樣一想,其實我們可以直接使用 Python 的字串來進行 csv 的存檔。

# -*- coding: utf-8 -*-
a = ['Today', 'is', 'a', 'nice', 'day', '.']
b = ['Today', 'is', 'a', 'bad', 'day', '.']

csvFile = ''
ab = [a, b]
for line in ab:
    for word in line:
        csvFile += '{},'.format(word)

    csvFile += '\n'

open('test2.csv', 'w', encoding='utf-8').write(csvFile)



Output:

這樣儲存倒也滿直覺的。


References


Read More

Tags:

Leave a Reply取消回覆

Exit mobile version