2013-11-03 86 views
1

我有这个。使用python中的列表查找并替换csv字符串

import csv 

ifile = open('file', 'rb') 
reader = csv.reader(ifile,delimiter='\t') 
ofile = open('file', 'wb') 
writer = csv.writer(ofile, delimiter='\t') 


findlist = ['A', 'G', 'C', 'T', 'Y', 'R', 'W', 'S', 'K', 'M', 'X', 'N', '-'] 
replacelist = ['AA', 'GG', 'CC', 'TT', 'CT', 'AG', 'AT', 'GC', 'TG', 'CA', 
'NN', 'NN', '-'] 

rep = dict(zip(findlist, replacelist)) 

def findReplace(find, replace): 
    s = ifile.read() 
    s = s.replace(find, replace) 
    ofile.write(s) 

for item in findlist: 
    findReplace(item, rep[item]) 

ifile.close() 
ofile.close() 

它的作用是用AA取代A。但是我想要的是用replacelist中的字母替换所有的字母。我对python非常陌生,无法弄清楚为什么它不能取代所有的东西。

HE670865 399908 N N N N N 
HE670865 399910 N N N N N 
HE670865 399945 T T N T T 
HE670865 399951 R R N A A 
HE670865 399957 A A N A A 
HE670865 399978 C C C M C 
HE670865 399980 C C C C C 
HE670865 399982 T T T T K 
HE670865 399984 C C C C C 


HE670865 399908 N N N N N 
HE670865 399910 N N N N N 
HE670865 399945 T T N T T 
HE670865 399951 R R N AA AA 
HE670865 399957 AA AA N AA AA 
HE670865 399978 C C C M C 
HE670865 399980 C C C C C 
HE670865 399982 T T T T K 
HE670865 399984 C C C C C 

回答

5

这是因为你正在循环内读写。

rep = dict(zip(findlist, replacelist)) 

s = ifile.read() 
for item in findlist: 
    s = s.replace(item, rep[item]) 
ofile.write(s) 

另外,我觉得你的代码将更具可读性(以及更简洁),不使用不必要dict

s = ifile.read() 
for item, replacement in zip(findlist, replacelist): 
    s = s.replace(item, replacement) 
ofile.write(s) 
+0

我没有得到问题代码不工作的原因。是否因为函数使用导致局部变量?我试着用'ifile'&'ofile'作为字符串&那是我的代码中的错误。 –

+1

由于您为每次替换都进行了读写操作,因此在第一次迭代之后,“ifile”已经一直读到最后。所以'ifile.read()'在第一次迭代后返回空字符串。 –

相关问题