【Python】读写 CSV 编码数据

读写 CSV 编码数据

对于大部分类型的 CSV 数据,都可以使用 CSV 库处理。对于如下CSV文件:

zzz@ubuntu:~/my_learning$ cat file3
Name,Stu_num,Sge,Class
Tom,001,12,1
Jack,002,13,2
Dana,003,12,1
Emma,004,12,2
zzz@ubuntu:~/my_learning$

1. 使用 CSV 库读取文件

>>> with open('file3', 'rt') as f:
...     f_csv = csv.reader(f)
...     print(f_csv)
...     headers = next(f_csv)
...     for row in f_csv:
...             print(row)
... 
<_csv.reader object at 0x7f8577beadd0>
['Tom', '001', '12', '1']
['Jack', '002', '13', '2']
['Dana', '003', '12', '1']
['Emma', '004', '12', '2']
>>>

这样就可以将文件的每一行处理成一个元组,可以使用 row[1] 的形式访问。这样的索引含义不太清楚。因此,可以使用 namedtuple 命名元组。

>>> with open('file3', 'rt') as f:
...     f_csv = csv.reader(f)
...     headers = next(f_csv)
...     Row = namedtuple('Row', headers)
...     for r in f_csv:
...         row = Row(*r)
...         print(row)
... 
Row(Name='Tom', Stu_num='001', Age='12', Class='1')
Row(Name='Jack', Stu_num='002', Age='13', Class='2')
Row(Name='Dana', Stu_num='003', Age='12', Class='1')
Row(Name='Emma', Stu_num='004', Age='12', Class='2')
>>>

使用 namedtuple 命名元组需要注意一个问题,就是列的标头需要是合法的 Python 标识符,这就需要在使用前对原始标头做必要的调整。另一种可行的方法是读取为字典序列。

>>> with open('file3', 'rt') as f:
...     f_csv = csv.DictReader(f)
...     for row in f_csv:
...         print(row)
... 
{'Name': 'Tom', 'Stu_num': '001', 'Age': '12', 'Class': '1'}
{'Name': 'Jack', 'Stu_num': '002', 'Age': '13', 'Class': '2'}
{'Name': 'Dana', 'Stu_num': '003', 'Age': '12', 'Class': '1'}
{'Name': 'Emma', 'Stu_num': '004', 'Age': '12', 'Class': '2'}
>>>

2. 使用 CSV 库写入文件

写入元组序列的数据:

>>> headers
['Name', 'Stu_num', 'Age', 'Class']
>>> rows
[('Nancy', '005', '13', '2'), ('Helen', '006', '12', '1')]
>>> with open('file3', 'w') as f:
...     f_csv = csv.writer(f)
...     f_csv.writerow(headers)
...     f_csv.writerows(rows)
... 
24
>>>
zzz@ubuntu:~/my_learning$ cat file3
Name,Stu_num,Age,Class
Nancy,005,13,2
Helen,006,12,1
zzz@ubuntu:~/my_learning$

或者写入字典序列的数据:

>>> R
[{'Name': 'Nancy', 'Stu_num': '005', 'Age': '13', 'Class': '2'}, {'Name': 'Helen', 'Stu_num': '006', 'Age': '12', 'Class': '1'}]
>>> with open('file3', 'w') as f:
...     f_csv = csv.DictWriter(f, headers)
...     f_csv.writeheader()
...     f_csv.writerows(R)
... 
24
>>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值