Python處理csv檔案(一)
阿新 • • 發佈:2019-02-08
CSV(Comma-Separated Values)即逗號分隔值,是純文字,任何編輯器都可開啟,在CSV檔案中:
- 值沒有型別,所有值都是字串
- 不能指定字型顏色等樣式
- 不能指定單元格的寬高,不能合併單元格
- 沒有多個工作表
- 不能嵌入影象圖表
在CSV檔案中,以,
作為分隔符,分隔兩個單元格。像這樣a,,c
表示單元格a
和單元格c
之間有個空白的單元格。依此類推。
不是每個逗號都表示單元格之間的分界。所以即使CSV是純文字檔案,也堅持使用專門的模組進行處理。Python內建了csv模組。先看看一個簡單的例子。
filename = r'C:\Users\ljy\Desktop\paper2\data\train.csv'with open(filename) as f: reader = csv.reader(f) head_row = next(reader) for row in reader: # 行號從2開始 print(reader.line_num, row)
寫資料到csv檔案中
有reader可以讀取,當然也有writer可以寫入。一次寫入一行,一次寫入多行都可以。
import csv
# 使用數字和字串的數字都可以
datas = [['name', 'age'],
['Bob', 14],
['Tom', 23],
['Jerry', '18']]
with open('example.csv', 'w', newline='') as f:
writer = csv.writer(f)
for row in datas:
writer.writerow(row)
# 還可以寫入多行
writer.writerows(datas)
如果不指定newline=''
,則每寫入一行將有一空行被寫入。上面的程式碼生成如下內容。
name,age
Bob,14
Tom,23
Jerry,18
name,age
Bob,14
Tom,23
Jerry,18
DictReader和DictWriter物件
使用DictReader可以像操作字典那樣獲取資料,把表的第一行(一般是標頭)作為key。可訪問每一行中那個某個key對應的資料。
import csv
filename = 'F:/Jupyter Notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.DictReader(f)
for row in reader:
# Max TemperatureF是表第一行的某個資料,作為key
max_temp = row['Max TemperatureF']
print(max_temp)
使用DictWriter類,可以寫入字典形式的資料,同樣鍵也是標頭(表格第一行)。
import csv
headers = ['name', 'age']
datas = [{'name':'Bob', 'age':23},
{'name':'Jerry', 'age':44},
{'name':'Tom', 'age':15}
]
with open('example.csv', 'w', newline='') as f:
# 標頭在這裡傳入,作為第一行資料
writer = csv.DictWriter(f, headers)
writer.writeheader()
for row in datas:
writer.writerow(row)
# 還可以寫入多行
writer.writerows(datas)