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)
以上步驟完成后,在命令提示符中輸入相應命令即可(請參照)
代碼如下:
