水一篇博客
f=open('tihuan.txt')#打开文件
old_id=[]#定义其为列表
new_id=[]
dict1={}#其为字典
string=[]#其为列表
for each_line in f: #对f每行进行遍历
(old,new)=each_line.strip().splist('\t',1)#见注释1
old_id.append(old)#将old元素加入old_id列表中
new_id.append(new)#同理
dict1=dict (zip(old_id,new_id) )#见注释2
h=open('yuan.txt')#打开文件h
for each_line in h:
(A,B)=each_line.strip().splist('\t',1)
if A>B:
C=A
A=B
B=C#以上三行的作用是保证A的字典序<B的字典序
if ((A in dict1) and (B in dict1));#如果dict1中存在key 值为A和key 值为B
now =dict1[A]+'\t'+dict1[B]+'\n'#则将A所映射的value值与B所映射的value值成两列放入now中
string.append(now)#也就是将统一格式后的new_id放入了string中
elif ((A in dict1) and (B not in dict1)):#后半句是转换ID后的替换文件中的old_id没有源文件中的B
now =dict [A] +'\t'+B +'\n'#因为源文件中的相邻两列经过处理必定是两个相互作用的蛋白id,而经过转换后的文件中,可能发生丢失,所以一下几步是必要的
string.append(now)
elif ((A not in dict1) and (B in dict1)):
now = A +'\t'+dict1[B]+'\n'
string .append(now)
else :
now =A+'\t' +B +'\n'
string.append(now)
now_file=open('gai.txt','w)
new_file.writeliness(string)#注释三
new_file.close()
f.close()
注释一:strip函数是删去行首和行尾的空格的空白符(‘\n','\t',' ','r')
splist 函数是切割函数,如splist('\t',1)表示按制表符进行切割,并且只切割一次。(old,new)是切割后的两个元素分别赋予old,new。
注释二:zip函数定义:从参数中的多个迭代器取元素组合成一个新的迭代器。返回:返回一个zip对象,其内部元素为元组,可转化为列表或字典。如:m=[1,2,3];n=[4,5,6];zip(m,n)的返回结果是(1,4),(2,5),(3,6)。并且dict(zip()))是将zip的返回结果字典化,即变为dict[1]=4,dict[2]=5,dict[3]=6。
其中1是key值,4是value值。
注释三:writeliness 函数的参数是序列或字符串,将其写入文件中。
细节,调用open 函数后,还要调用close函数。而用with open as函数可以不用再调用close函数。
ps:代码来源他出。