用python处理csv数据_如何用python处理csv数据

2017-03-07 回答

因为python处理json比较方便,所以首先测试一下csv和json哪个快。

首先生成测试数据

# coding: utf-8import jsonimport csvimport randomfrom string import letterslow = 1e2 # 3-10位数字hi = 1e11cnt = 100000 # 10万条total = {}for _ in range(cnt):

total[str(random.randrange(low, hi))] = "".join(random.sample(letters, 10))with open("data.json", "w") as f:

f.write(json.dumps(total, ensure_ascii=false))with open("data.csv", "w") as f:

writer = csv.writer(f, delimiter=',')

writer.writerows(total.items())

然后对比由这两者生成dict的速度

# coding: utf-8import jsonimport csvfrom time import clockt0 = clock()total1 = json.load(open("data.json"))t1 = clock()total2 = {}with open("data.csv") as f:

reader = csv.reader(f)

for k, v in reader:

total2[k] = vt2 = clock()print "json: %fs" % (t1 - t0)print "csv: %fs" % (t2 - t1)

输出是:

json: 0.109953s

csv: 0.066411s

果然csv还是蛮快的,那我们就用它吧。

接下来解决更新问题。我不知道题主对于重复项需要怎么处理,所以都写了。

# 先生成数据,同之前的做法。low = 1e2hi = 1e11cnt = 100000new = {}for _ in range(cnt):

new[str(random.randrange(low, hi))] = "".join(random.sample(letters, 10))# 找出重复项,因为是随机生成的数据,所以恰好没有重复项duplicate = {k:v for k, v in new.items() if k in total}# 输出重复项print(json.dumps(duplicate, ensure_ascii=false, indent=4))# 1. 如果重复项是用new覆盖totaltotal.update(new)# 2. 如果是保留totalnew.update(total)total = new# 然后再写回csv文件中with open("data.csv", "w") as f:

writer = csv.writer(f, delimiter=',')

writer.writerows(total.items())

至于运行时间,如果不算上输出重复项的时间,不到0.5s。算上的话大概也就0.8s。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值