※ 引述《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