python-读写CSV数据

6.1 使用csv模块来读写csv数据
  • 我们有如下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我们获取的是一个数组,这样想要拿到指定列的值,我们需要使用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等方式调用值,不会造成混淆
  • namedtuple第一个参数row相当于对象名,第二个参数,相当于属性列表,需要输入一个元组
  • 可使用如下方式进行取值
>>> rl.symbol
'B'
>>> rl.price
'30.1'
>>> rl.date
'5/11/2022'
>>>
  • 但是上述方法只适用于headers的值都是合法标识符,如果不是,需要使用下划线或者其它占位符代替

  • 也可以使用如下方式将csv数据读取为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
  • 如果数据是数据字典结构,也可以这样处理
>>> 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)
...
  • 31
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值