在csv檔案中,以,
作為分隔符,分隔兩個單元格。像這樣a,,c
表示單元格a
和單元格c
之間有個空白的單元格。依此類推。
不是每個逗號都表示單元格之間的分界。所以即使csv是純文字檔案,也堅持使用專門的模組進行處理。python內建了csv模組。先看看乙個簡單的例子。
import csv
filename = 'f:/jupyter notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.reader(f)
print(list(reader))
data
不能直接列印,list(data)最外層是list,裡層的每一行資料都在乙個list中,有點像這樣
[['name', 'age'], ['bob', '14'], ['tom', '23'], ...]
於是我們可以這樣訪問到bob的年齡reader[1][1]
, 在for迴圈中遍歷如下
import csv
filename = 'f:/jupyter notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.reader(f)
for row in reader:
# 行號從1開始
print(reader.line_num, row)
擷取一部分輸出
1 ['akst', 'max temperaturef', 'mean temperaturef', 'min temperaturef', 'max dew pointf', 'meandew pointf', 'min dewpointf', 'max humidity', ' mean humidity', ' min humidity', ' max sea level pressurein', ' mean sea level pressurein', ' min sea level pressurein', ' max visibilitymiles', ' mean visibilitymiles', ' min visibilitymiles', ' max wind speedmph', ' mean wind speedmph', ' max gust speedmph', 'precipitationin', ' cloudcover', ' events', ' winddirdegrees']
2 ['2014-1-1', '46', '42', '37', '40', '38', '36', '97', '86', '76', '29.95', '29.77', '29.57', '10', '8', '2', '25', '14', '36', '0.69', '8', 'rain', '138']
...
前面的數字是行號,從1開始,可以用reader.line_num
獲取。
要注意的是,reader只能被遍歷一次。由於reader是可迭代物件,可以使用next
方法一次獲取一行。
import csv
filename = 'f:/jupyter notebook/matplotlib_pygal_csv_json/sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.reader(f)
# 讀取一行,下面的reader中已經沒有該行了
head_row = next(reader)
for row in reader:
# 行號從2開始
print(reader.line_num, row)
有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可以像操作字典那樣獲取資料,把錶的第一行(一般是標頭)作為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 = [,,]
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)
就先了解到這兒。 用Python處理csv檔案
csv 是 逗號分隔值 的英文縮寫,通常都是純文字檔案。建議使用 wordpad 或是記事本 note 來開啟,再則先另存新檔後用 excel 開啟,也是方法之一。一直以為 csv 是某種 excel 檔案,原來是一種純文字檔案,嘗試用記事本開啟乙個 csv 檔案 果然,在記事本中是以逗號為分隔符,...
利用Python處理CSV 檔案
csv 檔案 將資料作為一系列以逗號分隔的值寫入檔案,通俗的講就是兩個逗號的資訊之間看作乙個資料。csv模組包含在python標準庫中,可用於分析csv檔案中的資料行 import csv 利用matplotlib繪圖 from matplotlib import pyplot as plt fil...
python處理csv檔案(上)
逗號分隔值 comma separated values,csv,有時也稱為字元分隔值,因為分隔字元也可以不是逗號 其檔案以純文字形式儲存 資料 數字和文字 純文字意味著該檔案是乙個字串行 不含必須像二進位制數字那樣被解讀的資料。csv檔案由任意數目的記錄組成,記錄間以某種換行符分隔 每條記錄由欄位...