用python处理蛋白质互作信息

水一篇博客

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:代码来源他出。

猜你喜欢

转载自blog.csdn.net/weixin_43770577/article/details/89278321
今日推荐