训练蛋白质数据,处理对象中有很多未指明信息的蛋白质,需要对两个txt文件做筛选,第一个文件标注了蛋白质的信息,列与列之间用空格隔开,四列分别表示蛋白质的id、昵称、大小和附加信息
第二个txt文件的数据量远比第一个文件大,不能用记事本打开,用PyCharm打开如下:
列与列之间用空格隔开,三列分别表示蛋白质1的id、蛋白质2的id、蛋白质1和2关联评分
所要做的是把文件一所有包含“Uncharacterized protein”字符串的行删去,把文件二中所有包含文件一删去的蛋白质的行删去。
采用如下办法:
第一步:在第一个文件筛选出所有含有“Uncharacterized protein”字段的数据,代码如下:
import re
lineList = []
matchPattern = re.compile(r'Uncharacterized protein')
file = open('protein items.txt','r',encoding='UTF-8')
while 1:
line = file.readline()
if not line:
print("Read file End or Error")
break
elif matchPattern.search(line):
lineList.append(line)//实际操作过程中把下一个else中的pass和这一句替换了,以满足任务需求
else:
pass
file.close()
file = open(r'dest.txt', 'w',encoding='UTF-8')
for i in lineList:
file.write(i)
file.close()
第二步:读取筛选结果,并提取出第一列到一个新的文件test.txt
line = f.readline() # 以行的形式进行读取文件
list1 = []
while line:
a = line.split()
b = a[0:1] # 这是选取需要读取的列
list1.append(b) # 将其添加在列表之中
line = f.readline()
f.close()
path_out = 'test.txt' # 新的txt文件
t = ''
with open(path_out, 'w+') as f_out:
for i in list1:
for j in range(len(list1[0])):
t = t + str(i[j])
f_out.write(t)
f_out.write('\n')
t = ''
第三步:用Notepad++在文本每一行的行首和行尾都插入特定的相同字符,之后把内容复制下来,填入第四部的代码中
具体做法参考文章:https://blog.csdn.net/weixin_34191845/article/details/85905681
第四步:
#!/bin/env python
import shutil, sys, os
darray = [
//第三步复制的内容放在这里
]
def isInArray (array, line):
for item in array:
if item in line:
return True
return False
fname = r'C:\Users\YOGA\Desktop\download.json'
fresult = r'C:\Users\YOGA\Desktop\download2.json'
with open(fname, 'r', encoding='UTF-8') as f:
with open(fresult, 'w', encoding='UTF-8') as g:
for line in f.readlines():
if not isInArray(darray, line):
g.write(line)