Python處理csv檔案

2021-09-19 15:10:33 字數 3434 閱讀 2408

在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檔案由任意數目的記錄組成,記錄間以某種換行符分隔 每條記錄由欄位...