Comma Separated Values,簡稱CSV,它是一種以逗号分隔數值的檔案類型。在資料庫或電子表格中,它是最常見的導入導出格式,它以一種簡單而明了的方式存儲和共享資料,CSV檔案通常以純文字的方式存儲資料表。今天,我将給大家分享在Python中如何操作CSV檔案。
一、資料源
首先,我們來看看本次操作的資料源,圖1 CSV檔案是在Excel中打開的,圖2 CSV檔案是在Notepad++中打開的,我們在圖2中可以看到數值之間是以逗号分隔開的,每行末尾是CR回車符和LF換行符(請注意,Linux系統以LF結尾,MacOS系統以CR結尾)。

二、使用Python基本文法讀寫CSV檔案
使用基本文法讀取CSV檔案中的資料大概思路是:擷取檔案對象,讀取表頭,按逗号分隔符拆分表頭字段,使用for循環語句擷取表體記錄資料,拆分後再次寫入另一張CSV檔案中(如果要将資料寫入xls*格式的檔案中,請參考前期公衆号文章),步驟如下:
Step 1:導入必要子產品,擷取輸入輸出檔案路徑。
import sys
infile = sys.argv[1]
outfile = sys.argv[2]
Step 2:使用open内置函數擷取檔案對象。
with open(infile, "r", newline='') as fr, open(outfile, "w", newline='') as fw:
Step 3:使用檔案對象的readline方法或者疊代器的next方法讀取表頭(檔案對象是一個疊代器對象,支援疊代協定),使用str.split方法對表頭進行拆分(注意,要使用strip函數去掉尾部換行符)。
header = next(fr)
header = header.strip()
header_list = header.split(",")
Step 4:既然表頭已經查分好了,我們需要将表頭寫入檔案對象中(注意尾部需要添加一個換行符哦)。
fw.write(",".join(map(str, header_list)) + "\n")
當然,上面的代碼也可以這麼寫:
print(*header_list, sep=",", file=fw)
Step 5:使用for循環讀取表體資料,并将其拆分成清單寫入到檔案中。
for row in fr:
row = row.strip()
row_list = row.split(",")
fw.write(",".join(map(str, header_list)) + "\n")
以上步驟完成後,在指令提示符中輸入:
python csvrw.py inputfile.csv outputfile.csv
輸入輸出csv檔案名稱以及腳本名稱請自定義,以上隻是舉例說明。
以上代碼如下:
三、使用csv子產品讀寫CSV檔案
csv子產品是Python内置的一個子產品,它考慮了csv檔案中的各種複雜情況,平時處理檔案基本上使用此子產品,下面來看看csv子產品處理csv檔案的方式,其步驟如下:
Step 1:首先,導入必要子產品,擷取輸入輸出檔案路徑。
import sys
import csv
infile = sys.argv[1]
outfile = sys.argv[2]
Step 2:使用open内置函數擷取檔案對象。
with open(infile, "r", newline='') as incsv, open(outfile, "w", newline='') as outcsv:
Step 3:使用csv子產品中的reader和writer函數分别擷取reader和writer對象。
freader = csv.reader(incsv, delimiter=",")
fwriter = csv.writer(outcsv, delimiter=",")
Step 4:使用for循環語句讀取和寫入資料。
for rowlist in freader:
fwriter.writerow(rowlist)
以上步驟完成後,在指令提示符中輸入相應指令即可(請參照)
代碼如下:
四、使用pandas讀寫CSV檔案
pandas庫是一個強大的資料處理和資料分析庫,使用pandas處理csv檔案更簡單,其步驟如下:
Step 1:首先,導入必要子產品,擷取輸入輸出檔案路徑。
import sys
import pandas as pd
infile = sys.argv[1]
outfile = sys.argv[2]
Step 2:使用pandas的read_csv方法将資料存儲到一個DataFrame對象中。
dataframe = pd.read_csv(infile)
Step 3:然後使用DataFrame的to_csv方法将其輸出到另一張csv表中。
dataframe.to_csv(outfile, index=False)
以上步驟完成後,在指令提示符中輸入相應指令即可(請參照)
代碼如下: