python 讀寫CSV數(shù)據(jù)

6.1 使用csv模塊來讀寫csv數(shù)據(jù)
  • 我們有如下csv文件
~/ning-dashboard/tmp > cat test.csv                                                                                     2m 56s
symbol,price,date
"A",30.3,"6/11/2022"
"B",30.1,"5/11/2022"
一、讀取CSV文件
  • 可以使用csv模塊來解析csv文件
>>> import csv
>>> with open("test.csv") as f:
...     f_csv = csv.reader(f)
...     headers = next(f_csv)
...     print(headers)
...     for r in f_csv:
...         print(r)
...
['symbol', 'price', 'date']
['A', '30.3', '6/11/2022']
['B', '30.1', '5/11/2022']
>>>
  • 上面的row我們獲取的是一個數(shù)組,這樣想要拿到指定列的值,我們需要使用row[0],row[1]這樣,容易造成混淆

  • 我們可以考慮使用命名元組

>>> import csv
>>> from collections import namedtuple
>>> with open("test.csv") as f:
...     f_csv = csv.reader(f)
...     headers = next(f_csv)
...     row = namedtuple('row',headers)
...     for r in f_csv:
...         rl = row(*r)
...         print(rl)
...
row(symbol='A', price='30.3', date='6/11/2022')
row(symbol='B', price='30.1', date='5/11/2022')
>>>
  • 而且這樣我們就可以使用row.symbol等方式調(diào)用值,不會造成混淆
  • namedtuple第一個參數(shù)row相當(dāng)于對象名,第二個參數(shù),相當(dāng)于屬性列表,需要輸入一個元組
  • 可使用如下方式進(jìn)行取值
>>> rl.symbol
'B'
>>> rl.price
'30.1'
>>> rl.date
'5/11/2022'
>>>
  • 但是上述方法只適用于headers的值都是合法標(biāo)識符,如果不是,需要使用下劃線或者其它占位符代替

  • 也可以使用如下方式將csv數(shù)據(jù)讀取為OrderedDict

>>> with open("test.csv") as f:
...     f_csv = csv.DictReader(f)
...     for row in f_csv:
...         print(row)
...
OrderedDict([('symbol', 'A'), ('price', '30.3'), ('date', '6/11/2022')])
OrderedDict([('symbol', 'B'), ('price', '30.1'), ('date', '5/11/2022')])
>>> row['symbol']
'B'
>>> row['price']
'30.1'
>>>

二、寫入csv文件

>>> h = ["test","test2","test3"]
>>> d = [("1",2,3),("2",30,20)]
>>> with open("test1.csv",'w') as f:
...     f_csv = csv.writer(f)
...     f_csv.writerow(h)
...     f_csv.writerows(d)

~/ning-dashboard/tmp > cat test1.csv
test,test2,test3
1,2,3
2,30,20
  • 如果數(shù)據(jù)是數(shù)據(jù)字典結(jié)構(gòu),也可以這樣處理
>>> import csv
>>> d = [("1",2,3),("2",30,20)]
>>> h = ["test","test2","test3"]
>>> with open("test2.csv",'w') as f:
...     f_csv = csv.DictWriter(f,h)
...     f_csv.writeheader()
...     f_csv.writerows(d)
...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容