生信宝典练习题

1、读入文件的方法,以转录本编码为名字,并去空格并且将碱基序列连成一串,输出。

aDict = {}
with open ('./1.txt','r') as f:
    for line in f:
        if line[0] == '>':
            key = line.split(' ')[0]
            aDict[key] = []
        else:
            aDict[key].append(line.strip().upper())
            
    for key, values in aDict.items():
        print(key)
        print(''.join(values))
>Rosalind_1
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
>Rosalind_2
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
>Rosalind_3
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
>Rosalind_4
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCV

2、将上述序列按没行80个碱基或者其他数值输出到屏幕

aDict = {}
length = 80
with open ('./1.txt','r') as f:
    for line in f:
        if line[0] == '>':
            key = line.split(' ')[0]
            aDict[key] = []
        else:
            aDict[key].append(line.strip().upper())
            
    for key, values in aDict.items():
        print(key)
        seq2 = ''.join(values)
        for i in range(0, len(seq2), length):    #range: 1st: start; 2nd: end; 3rd: step length
            print(seq2[i : i + length])  
>Rosalind_1
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCAT
TCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCA
ACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATA
TGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTG
TGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAA
AAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTC
TGATAGCAGC
>Rosalind_2
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCAT
TCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCA
ACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATA
TGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTG
TGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAA
AAAGAGTGTCTGATAGCAGC
>Rosalind_3
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCAT
TCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCA
ACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATA
TGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTG
TGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAA
AAAGAGTGTCTGATAGCAGC
>Rosalind_4
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCAT
TCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCA
ACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATA
TGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTG
TGGATTAAAAAAAGAGTGTCTGATAGCAGCV

3、将序列储存于字典,按第一个名字排序,输出到屏幕。

aDict = {} 
with open ('./bd2.txt','r') as f: 
    for line in f: 
        if line[0] == '>': 
            key = line.split(' ')[0] 
            aDict[key] = [] 
        else: 
            aDict[key].append(line.strip().upper())

keyS = sorted(aDict.keys())
for i in keyS:
    print(i)
    print(''.join(aDict[i]))
>Rosalind_1
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
>Rosalind_2
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
>Rosalind_3
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC
>Rosalind_5
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCAGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGCV

4、写程序,提取fasta.name中名字对应的test2.fa的序列,并输出到屏幕。 写程序,提取fastq.name中名字对应的test1.fq的序列,并输出到文件。

aDict = {}

seqFile = "./test.fa"
nameFile = "./fasta.name"

for line in open(seqFile):
    if line[0] == '>':
        key = line.split(' ')[0]#注意去掉开头的'>',只取序列的名字
        aDict[key] = []  #字典的值是一个列表
    else:
        aDict[key].append(line.strip().upper())
#--------END reading--------------------
for line in open(nameFile):
    line = '>' + line
    name = line.strip()
    print ("%s\n%s" % (name, ''.join(aDict[name])))
fasta = {}
for line in open(r'./test.fa'):
    if line.startswith('>'):
        key = line.split(' ')[0]    #首行用空格做分隔符,取第一个元素作为基因名
        fasta[key] = []             #建立以基因名为key的字典,准备存储序列
    else:
        fasta[key].append(line.strip().upper())

#读取fasta.name文件,并将其存储在name变量中
name = []
for line in open(r'./fasta.name'):
    line = '>' + line
    name.append(line.strip())

#输出fasta[name]序列至屏幕
for i in name:
    print(i)
    print(''.join(fasta[i]))
seqFile = "./fastq.txt"
nameFile = "./fastq.name"

aDict = {}
with open(seqFile) as f:
    for line in f:
        if line[0] == '@':
            na = line.strip()[1:] #去掉开头的@
            aDict[na] = [] #存储名字行  
        else:
                aDict[na].append(line)
#-------END reading----------这行知识注释,可有可无------
for line in open(nameFile):
    name = line.strip()
    print (name,'\n',''.join(aDict[name]))
fastq = {}
i = 1
for line in open(r'./fastq.txt'):
    if i % 4 == 1:                   #每条reads信息的第一行为reads名称
        seqID = line.strip('\n')[1:]    #取@之后的部分作为reads名
        fastq[seqID] = []
    elif i % 4 == 2:
        fastq[seqID].append(line.strip())
    i += 1

#写入文件,出了一些问题,需要debug... FUCK!!!!!!!!!
for line in open(r'./fastq.name'):
        name = line.strip()
        print(name,'\n',''.join(fastq[name]))

5、输入文件格式(mir.collapse, tab-分割的两列文件,第一列为序列,第二列为序列被测到的次数) 输出文件格式 (mir.collapse.fa, 名字的前3个字母为样品的特异标示,中间的数字表示第几条序列,是序列名字的唯一标示,第三部分是x加每个reads被测 到的次数。三部分用下划线连起来作为fasta序列的名字。)

file = r'./mir.collapse.txt'
with open(file) as f:
    all = f.readlines()
    lines = all[1:]
#----去除首行----
    miRNA = {}
    for line in lines:
        info = line.split()
        seq = info[0]
        miRNA[seq] = info[1]

num = 1
for key, value in miRNA.items():
    print('>' + 'ESB' + '_' + str(num) + '_' + 'x' + value, end = '\n')
    print(key)
    num +=1
>ESB_1_x2
ACTGCCCTAAGTGCTCCTTCTGGC
>ESB_2_x25
ATAAGGTGCATCTAGTGCAGATA
>ESB_3_x100
TGAGGTAGTAGTTTGTGCTGTTT
>ESB_4_x4
TCCTACGAGTTGCATGGATTC
file = r'./mir.collapse.txt'

head = 1
sample = 'ESB'
lineno = 0
for line in open(file):
    if head:
        head -=1
        continue          #continue用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环
    #----- skip header line ------
    seq, value = line.split()
    lineno += 1
    print('>{}_{}_x{}\n{}'.format(sample, lineno, value, seq))
>ESB_1_x2
ACTGCCCTAAGTGCTCCTTCTGGC
>ESB_2_x25
ATAAGGTGCATCTAGTGCAGATA
>ESB_3_x100
TGAGGTAGTAGTTTGTGCTGTTT
>ESB_4_x4
TCCTACGAGTTGCATGGATTC

6、简化的短序列匹配程序 (map.py) 把short.fa中的序列比对到ref.fa, 输出短序列匹配到ref.fa文件中哪些序列的哪些位置

find

用到的知识点

输出格式 (输出格式为bed格式,第一列为匹配到的染色体,第二列和第三列为匹配到染色体序列的起始终止位置(位置标记以0为起始,代表第一个位置;终止位置不包含在内,第一个例子中所示序列的位置是(199,208](前闭后开,实际是chr1染色体第199-206的序列,0起始). 第4列为短序列自身的序列.)。

附加要求:可以只匹配到给定的模板链,也可以考虑匹配到模板链的互补链。这时第5列可以为短序列的名字,第六列为链的信息,匹配到模板链为’+’,匹配到互补链为’-‘。注意匹配到互补链时起始位置也是从模板链的5’端算起的。

f1 = r'./short.fa.txt'
f2 = r'./ref.fa.txt'
#通过生成两个字典的方式进行查找
#short字典中,基因名为去除'>'及'\n'后,剩余部分
#ref字典中,基因名为去除'>'及'\n'后,剩余部分
short = {}
ref = {}
for line in open(f1):
    if line.startswith('>'):
        key = line.strip('>\n')
        short[key] = []
    else:
        short[key] = line.strip()
#----end reading f1-------------------
for line in open(f2):
    if line.startswith('>'):
        key = line.strip('>\n')
        ref[key] = []
    else:
        ref[key].append(line.strip())
#----end reading f2(ref)--------------

#以单个ref为参照,对所有待查找序列进行遍历
for key2, value2 in ref.items():
    #将ref中的序列进行连接,合并为一条长序列
    seqRef = ''.join(value2)
    for key1, value1 in short.items():
        start = seqRef.find(value1)
        while start != -1:         #表明ref中可以查找到short序列
            print('{}\t{}\t{}\t{}'.format(key2, start, start + len(value1), value1))
            new = seqRef[start+1:].find(value1)     #继续在剩余序列中查找
            if new == -1:
                break
            start = start + new + 1    #若new不等于-1,重新对start赋值(继续查找后续序列)
ref = r'./short.fa.txt'
short = r'./ref.fa.txt'
refD = {}
for line in open(ref):
    if line[0] == '>':
        name = line[1:-1]
        assert name not in refD
        refD[name] = []
    else:
        refD[name].append(line.strip())
#---------END reading----------------
for key, valueL in refD.items():
    refD[key] = ''.join(valueL)
#------------------------------------
for line in open(short):
    if line[0] == '>':
        pass
    else:
        seq = line.strip()
        len_seq = len(seq)
        for key, value in refD.items():
            pos = value.find(seq)
            while pos != -1:
                print("%s\t%d\t%d\t%s" % (key, pos, pos+len_seq, seq))
                current = pos + 1
                newpos = value[current:].find(seq)
                if newpos == -1:
                    break
                pos = current + newpos

7、fastq转fasta

fasta = open('./fasta.txt', 'w')
with open('./fastq.txt', 'r') as fastq:
    for line in fastq:
        if line[0] == '@':
            line = line.strip('[@\n]')
            print('>' + line)
            print(fastq.readline().strip())

8、写程序 transferMultipleColumToMatrix.py 将文件(multipleColExpr.txt)中基因在多个组织中的表达数据转换为矩阵形式

aDict[‘key’] = {}

aDict[‘key’][‘key2’] = value

if key not in aDict

aDict = {‘ENSG00000000003’: {“A-431”: 21.3, “A-549”, 32.5,…},”ENSG00000000003”:{},}

用到的知识点

输入格式(只需要前3列就可以)`

file = r'./multipleColExpr.txt'
with open(file) as f:
    all = f.readlines()
    lines = all[1:]             #去除首行的表头
    aDict = {}
    sample = []                   #定义样本存储变量
    for line in lines:
        details = line.split('\t')[:3]      #取文件每行的前三列
        key1 = details[0]
        if key1 not in aDict:               #若key1不在定义字典中,则进行记录,否则不记录
            aDict[key1] = {}
            key2 = details[1]
            aDict[key1][key2] = details[2]
        else:
            key2 = details[1]
            aDict[key1][key2] = details[2]
        sample.append(key2)              #记录样本
        sample.sort()
print('Name' + '\t'+ '\t'.join([i for i in set(sample)]))    #set的作用是抹去重复
file = r'./multipleColExpr.txt'
head = 1
tissueSet = set()
aDict = {}
for line in open(file):
    if head: #skip header line
        head -= 1
        continue
    #-------------------------------
    lineL = line.split()
    gene = lineL[0]
    tissue = lineL[1]
    expr = lineL[2]
    if gene not in aDict:
        aDict[gene] = {}
    assert tissue not in aDict[gene], "Duplicate tissues"
    aDict[gene][tissue] = expr
    tissueSet.add(tissue)
#---END reading----------------------------
tissueL = list(tissueSet)
tissueL.sort()
print ("Gene\t%s" % '\t'.join(tissueL))

for gene, tissueD in aDict.items():
    exprL = [gene]
    for tissue in tissueL:
        exprL.append(tissueD[tissue])
    print('\t'.join(exprL)) 
Gene	A-431	A-549	AN3-CA	BEWO	CACO-2
ENSG00000000003	21.3	32.5	38.2	31.4	63.9
ENSG00000000005	0.0	0.0	0.0	0.0	0.0
ENSG00000000419	73.8	38.6	33.9	53.7	155.5
ENSG00000000457	2.8	3.4	3.8	5.8	2.9
ENSG00000000460	25.2	14.2	10.6	24.4	14.2
ENSG00000000938	0.0	0.0	0.0	0.0	0.0

9、写程序 screenResult.py, 筛选test.expr中foldChange大于2的基因并且padj小于0.05的基因 逻辑与操作符 and 文件中读取的内容都为字符串,需要用int转换为整数,float转换为浮点数

file =r'./test.expr' 

head = 1 #This is used to indicate there is one head line needing to skip
for line in open(file):
    if head:
        head -= 1
        continue
    #-----Begin data lines------
    lineL = line.split()

    foldChange = float(lineL[9])
    adjP = float(lineL[12])
    if foldChange > 2 and adjP < 0.05:
        print (lineL[0])
Novel00011
Novel00043
Novel00047
Novel00077
Novel00079
Novel00080
Novel00084
Novel00085
Novel00086
Novel00087
Novel00090
Novel00124
Novel00148
Novel00156
Novel00162
Novel00166

10、反向互补序列

str1 = "ACGTACGTACGTCACGTCAGCTAGAC"

ATCG_dict = {'A':'T','T':'A','C':'G','G':'C', 'a':'t','t':'a','c':'g','g':'c'}

tmpL = []
for i in str1:
    tmpL.append(ATCG_dict[i])
print(''.join(tmpL))
tmpL.reverse()
print (''.join(tmpL))
TGCATGCATGCAGTGCAGTCGATCTG
GTCTAGCTGACGTGACGTACGTACGT

11 不同数据库基因ID 转换

file = r'./GRCh38.idmap'
file1 = r'./ensm.id'
idDict = {}
for line in open(file):
    if line[0] == 'G':
        continue
    lineL = line.strip().split(' ')
    ense = lineL[0]
    genesample = lineL[1]
    idDict[ense] = genesample

for line in open(file1):
    enid = line.strip()
    print(enid,idDict[enid],sep = ': ')

ENSG00000281230: SERTAD4
ENSG00000281917: SLC16A1
ENSG00000252303: RNU6-280P
ENSG00000281771: Y_RNA
ENSG00000280584: OBP2B
ENSG00000281614: INPP5D
ENSG00000281876: RP11-399E6.4
ENSG00000281518: FOXO6

12、人类基因组的外显子区域到底有多长

import csv

ncbi_file="./data/CCDS.current.txt"
with open(ncbi_file,'r')as f1:
    file=csv.reader(f1,delimiter="\t")
    next(file)
    sum=0
    exon_dict={} # dict is faster than list
    for record in file:
        if record[9] != "-":
            chr=record[0]
            exon_list=record[9].lstrip("[").rstrip("]").split(", ")
            # print(exon_list)
            for range in exon_list:
                exon=chr+":"+range
                #print(exon)
                if exon not in exon_dict:
                    exon_dict[exon]=""
                    exon_start=int(range.split("-")[0])
                    exon_end=int(range.split("-")[1])
                    # print(exon_start)
                    sum+=exon_end-exon_start
print(sum)
#coding=utf-8
import re
f=open('./data/CCDS.current.txt','r')
sum=0
list=[]
dit={}
for line in f:
    if line.startswith('#'):
        continue
    line=line.rstrip()
    exons=re.findall('[0-9]+-[0-9]+',line)#匹配像00000-00000这种格式的数据,检查了一下可以将所有的外显子匹配到
    for exon in exons:
        list.append(exon)#将每一个外显子存入list中
st=set(list)#将列表set去重
for i in st:
    exon_one=i.split('-')#还可以用find函数找到-的位置然后用切片操作找到起始点和终止点
    exon_start=exon_one[0]
    exon_end = exon_one[1]
    sum+=int(exon_end)-int(exon_start)
print (sum)
import csv

ncbi_file="./data/CCDS.current.txt"
with open(ncbi_file,'r')as f1:
    file=csv.reader(f1,delimiter="\t")
    next(file)
    for record in file:
        gene = record[2]
        with open('./data/test.txt', 'wt') as f1:
            print(gene, file=f1)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值