Re: [问题] 如何修改code让其跑更快

楼主: flarehunter (Range)   2014-07-21 14:46:10
※ 引述《sariel0322 (sariel)》之铭言:
: 不好意思,最近需要跑相当大量的资料
: 因此需要把code的速度做最有效的提升
: 这是我的两个data
: pfam.csv_IPR_NA.csv(csv不小心重复了,不过不是重点:p):
: http://ppt.cc/oB18
: proteinIDandGOID_norepet.csv:
: http://ppt.cc/NSE3
: 我需要把第一个csv的第二栏跟第二个csv的第一个字段做对应
: 有对应到的全部做输出
: 类似下面这样:
: http://ppt.cc/UA7t
: 以下是我的code:
: import csv
: proteinID = []
: GOID = []
: a = 0
: o = open("final.csv","w")
: g = open("proteinIDandGOID_norepet.csv","r")
: f = open("pfam.csv_IPR_NA.csv","r")
: for row in csv.reader(g):
: proteinID.append(row[0])
: GOID.append(row[1])
把资料建成key是proteinID, value是GOID list的dict
from collections import defaultdict
GOID_table = defaultdict(list)
for row in csv.reader(g):
GOID_table[row[0]].append(row[1])
: for row in csv.reader(f):
: for i in range(len(GOID)):
: if row[1] == proteinID[i]:
: o.write(row[0] + "," + row[1]+"," + row[2] + "," + GOID[i] + "\n")
for row in csv.reader(f):
# 查询dict的key应该是O(1) 比原本的快
if row[1] in GOID_table:
for GOID in GOID_table[row[1]]:
# 写入csv应该可以用csv.writer,可以查一下
o.write(row[0] + "," + row[1]+"," + row[2] + "," + GOID + "\n")
: f.close()
: o.close()
: g.close()
: 想问一下大家有没有更有效率的写法
: 感恩orz
作者: sariel0322 (sariel)   2014-07-21 15:00:00
喔喔!!速度快上超多倍的!!会多去了解你的写法非常感谢你提供的写法

Links booklink

Contact Us: admin [ a t ] ucptt.com