记录一次用python筛选数据的过程

训练蛋白质数据,处理对象中有很多未指明信息的蛋白质,需要对两个txt文件做筛选,第一个文件标注了蛋白质的信息,列与列之间用空格隔开,四列分别表示蛋白质的id、昵称、大小和附加信息
文件1 蛋白质信息

第二个txt文件的数据量远比第一个文件大,不能用记事本打开,用PyCharm打开如下:
文件2 蛋白质关联信息
列与列之间用空格隔开,三列分别表示蛋白质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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值