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
- https://docs.python.org/3/library/csv.html
- https://realpython.com/python-csv/
- http://zetcode.com/python/csv/