python的csv标准库_Python标准库--csv模块

csv模块

读写逗号分隔值的文件

一、准备文件

csv_test.csv

user,passwd,date

a1,a2,2018-04-23

b1,b2,2018-04-24

c1,c2,2018-04-25

二、读文件

reader()

with open("csv_test.csv", "rt") as f:

reader = csv.reader(f)

for row in reader:

print(row)

['user', 'passwd', 'date']

['a1', 'a2', '2018-04-23']

['b1', 'b2', '2018-04-24']

['c1', 'c2', '2018-04-25']

DictReader()

with open("csv_test.csv", "rt") as f:

dict_reader = csv.DictReader(f)

for row in dict_reader:

print(row)

# print(row.get('user'), row.get('passwd'), row.get('date'))

OrderedDict([('user', 'a1'), ('passwd', 'a2'), ('date', '2018-04-23')])

OrderedDict([('user', 'b1'), ('passwd', 'b2'), ('date', '2018-04-24')])

OrderedDict([('user', 'c1'), ('passwd', 'c2'), ('date', '2018-04-25')])

可以看出区别一个是list, 一个是OrderedDict,在切换注释,使用get取值:

a1 a2 2018-04-23

b1 b2 2018-04-24

c1 c2 2018-04-25

使用DictReader()读取文件,会使用第一行的值当key和后面每一行组成一个OrderedDict,这样取值使用更方便

fieldnames 第一行字段名

with open(path, "rt") as f:

dict_reader = csv.DictReader(f)

print(dict_reader.fieldnames)

['user', 'passwd', 'date']

当数据不包含数据字段名时,可以指定字段名

准备 csv 文件:

a1,a2,2018-04-23

b1,b2,2018-04-24

c1,c2,2018-04-25

代码如下:

fieldnames = ['user', 'passwd', 'date']

with open("csv_test.csv", "rt") as f:

dict_reader = csv.DictReader(f, fieldnames=fieldnames)

print(dict_reader.fieldnames)

print("===========================")

for row in dict_reader:

print(row.get(fieldnames[0]), row.get(fieldnames[1]), row.get(fieldnames[2]))

运行代码:

['user', 'passwd', 'date']

===========================

a1 a2 2018-04-23

b1 b2 2018-04-24

c1 c2 2018-04-25

三、写文件

writer()

with open("csv_test.csv", "wt") as f:

writer = csv.writer(f)

writer.writerow(('user', 'passwd', 'date'))

for i in range(3):

writer.writerow((i + 1, chr(ord('a') + i), '2018-%02d-45' % (i+1)))

DictWriter()

fieldnames = ['user', 'passwd', 'date']

with open(path, "wt") as f:

dict_writer = csv.DictWriter(f, fieldnames=fieldnames)

headers = dict((n, n) for n in fieldnames)

dict_writer.writerow(headers)

for i in range(3):

data = (i + 1, chr(ord('a') + i), '2018-%02d-45' % (i + 1))

values = {}

for index in range(len(fieldnames)):

values[fieldnames[index]] = data[index]

dict_writer.writerow(values)

DictWriter()需要单独写入文件头行

四、逐行读取

reader()

reader = csv.reader(open("csv_test.csv", "rt"))

print(next(reader))

print(next(reader))

print(next(reader))

DictReader()

def test(dict_reader):

for row in dict_reader:

yield row.get(fieldnames[0]), row.get(fieldnames[1]), row.get(fieldnames[2])

dict_reader = csv.DictReader(open("csv_test.csv", "rt"))

fieldnames = ['user', 'passwd', 'date']

print(next(test(dict_reader)))

print(next(test(dict_reader)))

print(next(test(dict_reader)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值