栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

利用Python解决生物问题-将fasta文件转换为excel文件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用Python解决生物问题-将fasta文件转换为excel文件

准备文件-存放序列的fasta文件

生成文件:基因id-序列的excel文件


实现思路

1.先统计一下序列文件的总行数count,用于检索每条序列起始位置,以及定位最后一条序列结束位置
2.搜索文件中的‘>’,并获取每一个‘>’的行数,添加到index_list中,该列表前后元素之间前闭后开即每条序列的位置,最后一条序列的后开要额外添加,最终列表的长度-1(len(seq_num)-1)即为序列数目
3.将序列以键值对存放于字典excel_dict中,键为基因id,值为列表存放每个基因对应的序列信息
4.将字典信息写入新文件中,先迭代写入key(基因id),在在key的缩进下,迭代写入value(序列信息,因为序列信息是列表形式存放的)

代码实现
def fasta2excel(fasta,excel):
    #用于统计总序列文件的行数
    count = 0
    with open(fasta,'r') as f1:
        for eachline in f1:
            count += 1

    ###获取每条序列的位置
    index_list = []
    with open(fasta,'r') as f2:
        for i in range(count):
            a = f2.readline()
            if '>' in a:
                index = i
                index_list.append(i)
                
    index_list.append(count+1)##添加最后一条序列的结束位置            
    ###序列数为seq_num-1
    seq_num = len(index_list)
    
    ###将序列以键值对存放于字典中
    excel_dict = {}
    with open(fasta,'r') as f3:
        for j in range(seq_num-1):
            geneid = f3.readline().rstrip('n').lstrip('>')###去除换行符
            geneseq = []#初始化每个基因的序列
            for n in range((index_list[j]+1),index_list[j+1]):#每个id对应的序列行数
                geneseq.append(f3.readline().rstrip('n'))
            excel_dict[geneid] = geneseq

    with open(excel,'w') as f4:
        for eachkey in excel_dict.keys():
            f4.writelines(eachkey)
            f4.write('t')
            for each in excel_dict[eachkey]:
                f4.writelines(each)
            f4.write('n')

    print(f'您所输入的序列文件有{count}行')
    print(f'您所输入的序列文件中包含的序列数目为{seq_num-1}')
fasta = input('请输入您需要转换的文件名(fasta格式):')
excel = input('请输入您生成文件的文件名(.xls)格式:')
fasta2excel(fasta,excel)
        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008760.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号