精华内容
下载资源
问答
  • 最近帮朋友做有关生物学的编程题,由于第一次接触有关FASTA文件的有关操作,用了不少时间才实现了如下功能:

    最近帮朋友做有关生物信息学的编程题,由于第一次接触有关FASTA文件的有关操作,用了不少时间才实现了如下功能:

    • FASTA文件的读取
    • 打印J列和K列对应范围的碱基
    • 统计DNA中的碱基数量

    操作步骤说明:输入data.xlsx内存在的基因名称,即可打印出同行J列与K列对应的基因片段,以及对应的剪切变体(B列名称),同时可以统计任意长度基因内的ATGC碱基数量。

    #Demo.py
    #将Demo.python与chromFa文件夹及data.xlsx放在同一目录下
    #=====================================================================
    #此函数用于打印J,K列指示的碱基序列
    def counting(str_in , str_1 , str_2):
        f = open(str_in)
        ls = []
        for line in f:
            if not line.startswith('>'):
                ls.append(line.replace('\n', ''))  # 去掉行尾的换行符
        f.close()
        _str = ''
        for i in range(0, len(ls)):
            _str += ls[i]#_str是fa文件的完整碱基序列
        arr_1 = getRange(str_1)
        arr_2 = getRange(str_2)
    
        for i in range(len(arr_1)):
            #print((len(_str),arr_1[i],arr_2[i]))
            print("第" + str(i + 1) + "个碱基序列是")
            print(_str[arr_1[i]:arr_2[i]])
            print("\n其中一共有:")
            countATGC(_str[arr_1[i]:arr_2[i]])
    
    
    #=====================================================================
    #此函数用于统计碱基序列中的A,T,G,C个数
    def countATGC(str_in):
        A = C = T = G = 0
        A += str_in.count('A')
        C += str_in.count('C')
        T += str_in.count('T')
        G += str_in.count('G')
        print('A:',A,'\n','C:',C,'\n','T:',T,'\n','G:',G,'\n')
    
    
    #=====================================================================
    #此函数用于去掉J,K列中的‘,’并转换成整型数组
    
    def getRange(str_in):
        arr = str_in.split(',')
        arr = [int(val) for val in arr[0:-1]]
        return arr
    
    
    #=====================================================================
    import xlrd
    
    FileContactList = "data.xlsx"
    FileName = FileContactList
    
    while True:
        KeyStr = input("请输入要搜索的基因名称: ")
        FileObj = xlrd.open_workbook(FileName)
        sheet = FileObj.sheets()[0]  # 获取第一个工作表
        row_count = sheet.nrows  # 行数
        col_count = sheet.ncols  # 列数    # 搜索关键字符串
        i = 1
        for element in range(row_count):
            if KeyStr.lower() in (str(sheet.row_values(element))).lower():
    #从Excel表格中提取出来的数据头部有b',尾部有',原因未知
                str_1 = str(sheet.cell(element, 9).value.encode('utf-8')).lstrip('b\'').rstrip('\'')
                str_2 = str(sheet.cell(element, 10).value.encode('utf-8')).lstrip('b\'').rstrip('\'')
                str_Path = "./chromFa/" + str(sheet.cell(element, 2).value.encode('utf-8')).lstrip('b\'').rstrip(
                    '\'') + ".fa"
                #print(str_Path)
                #print(str_1)
                #print(str_2)
                print("==>第" + str(i) + "个" + KeyStr)
                print("剪切变体是:")
                print(str(sheet.cell(element,2).value.encode('utf-8')).lstrip('b\'').rstrip('\''))
                counting(str_Path,str_1,str_2)
                i += 1
    #=====================================================================
    
    

    运行结果示例:
    Example Of Hackson's Demo
    代码及材料链接:
    https://github.com/suplex123/FASTA-Analysis

    展开全文
  • 1、需要将下面的fasta文件进行一个整理,将序列单行输出 方法一 f1 = open('test1.fa','r').readlines()#需要整理的文件 f2 = open('2.fasta','w')#整理之后的文件 for i in f1: if i.startswith('>'): ...

    1、需要将下面的fasta文件进行一个整理,将序列单行输出
    在这里插入图片描述
    方法一

    f1 = open('test1.fa','r').readlines()#需要整理的文件
    f2 = open('2.fasta','w')#整理之后的文件
    for i in f1:
    	if i.startswith('>'):
    		f2.write('\n'+i)
    	else:
    		f2.write(i.strip("\n"))
    

    结果如下,这样会有一个问题,输入的文件起始有一个空行
    在这里插入图片描述
    这时候怎么办呢?
    我中间加了一次判断,如果第一次遇到>,则不进行换行

    f1 = open('test1.fa','r').readlines()#需要整理的文件
    f2 = open('2.fasta','w')#整理之后的文件
    n = 0
    for i in f1:
    	if i.startswith('>'):
    		n += 1
    		if n == 1:
    			f2.write(i)
    		else:
    			f2.write('\n'+i)
    	else:
    		f2.write(i.strip("\n"))
    f2.close()
    

    在这里插入图片描述
    此时第一行的换行符就没有了。
    方法二:该方法比较费内存,小文件的处理可以,太大了就不行了,主要思想就是建立一个字典,把id和序列存入字典中

    f1 = open('test1.fa','r').readlines()#需要整理的文件
    f2 = open('2.fasta','w')#整理之后的文件
    a={}
    for i in f1:
    	if i.startswith('>'):
    		id = i.strip("\n")
    		fa=''
    	else:
    		fa = fa + i.strip("\n")
    		a[id]=fa
    for i in a:
    	f2.write(i+'\n'+a[i]+'\n')
    f2.close()
    

    2、当文件处理下面的情况,如何处理呢?
    在这里插入图片描述
    第一列是我的ID,第二列是序列,处理成fasta文件

    f1 = open('1.txt','r').readlines()#需要整理的文件
    f2 = open('1.fasta','w')#整理之后的文件
    for i in f1[1:]:#有表头,如果无表头则将1:去掉
    	id = i.split('\t')[0]
    	fa = i.strip('\n').split('\t')[1]
    	f2.write('>'+id+'\n'+fa+'\n')
    f2.close()
    

    在这里插入图片描述
    3、有些人会说,如果我的ID有重复,但是重复的,想把序列加和到一起,最后输出,该怎么办呢?

    f1 = open('1.fa','r').readlines()#需要整理的文件
    f2 = open('2.fa','w')#整理之后的文件
    a={}
    for i in f1:
    	if i.startswith('>'):
    		id = i.strip("\n")[1:]#去掉大于号
    	else:
    		fa = i.strip("\n")
    		if id in a:
    			a[id]=a[id]+fa
    		else:
    			a[id]=fa
    for i in a:
    	f2.write('>'+i+'\n'+a[i]+'\n')
    f2.close()
    

    思想,先建一个字典,把id作为key,而序列作为value,每一次增加字典内容时,判断id是不是已经在a的key中存在,如果不存在,这时候直接将序列作为value,但是如果存在了,这是该id对应的就是已经存在的value加上现在的序列。f1读取结束后,再遍历字典,就可以了
    总结:
    1、open()打开文件,r代表读取,而w则是写入,a是追加
    2、使用readlines()读取的文件,不需要关闭,但其他的文件是必须要关闭了,close就是关闭文件的意思
    3、split是分割,而strip则是掉左右两端的某字符,这里用的是\n其实就是换行符
    4、for循环和if判断语句

    展开全文
  • JFASTA是用于处理FASTA文件的轻量级框架。 它支持读取,写入和解析单个或多个FASTA文件。 文件可以一次读取/写入,也可以基于流读取(内存效率高)。 它稳定,非常直观,并且可以与Java 1.5 SDK及更高版本很好地集成...
  • [笔记]python对FASTA文件处理

    万次阅读 多人点赞 2018-04-27 19:17:06
    这学期选了生信的选修课—perl/python在生物信息学中的应用把结课作业的代码整理出来主要是python对FASTA文件的读取和数据处理FASTA文件数据处理FASTA文件读取:只含一个基因序列将FASTA文件的基因序列读取到一个...

    这学期选了生信的选修课—perl/python在生物信息学中的应用
    把结课作业的代码整理出来主要是python对FASTA文件的读取和数据处理

    FASTA文件数据处理

    FASTA文件读取:
    只含一个基因序列
    将FASTA文件的基因序列读取到一个列表中,列表中的每个元素为每一行基因序列构成的字符串
    f=open('/home/miaoyr/perl_practice/test1_file/DTNBP1.fasta')
    ls=[]
    for line in f:
            if not line.startswith('>'):    
                    ls.append(line.replace('\n',''))    #去掉行尾的换行符真的很重要!  
    f.close()
    

    含有多个序列信息
    将数据保存在字典中,键为基因名,值为基因序列
    f=open('/home/miaoyr/perl_practice/test4_file/3.fasta_seq.txt')
    seq={}
    for line in f:
            if line.startswith('>'):
                    name=line.replace('>','').split()[0]
                    seq[name]=''
            else:
                    seq[name]+=line.replace('\n','').strip()
    f.close()
    

    碱基数目和序列长度统计:
    上一步将基因序列写入列表,为了使用str.count()函数(使用对象为字符串)直接计算,将全部基因序列合并为一个字符串_str

    A=C=T=G=0
    _str=''
    for i in range(0,len(ls)):
            _str+=ls[i]
    print _str
    A+=_str.count('A')
    C+=_str.count('C')
    T+=_str.count('T')
    G+=_str.count('G')
    print 'A:',A,'\n','C:',C,'\n','T:',T,'\n','G:',G,'\n'
    

    输出互补序列:

    f=open('/home/miaoyr/perl_practice/test4_file/3.fasta_seq.txt')
    seq={}
    complement={'A':'T','G':'C','C':'G','T':'A','\n':'\n'}
    for line in f:
            if line.startswith('>'):
                    name=line
                    seq[name]=''
            else:
                    line=line.lstrip()
                    for i in line:
                            seq[name]+=complement[i]    #将互补序列存储到字典的值中
    f.close()
    _str=[]
    l=open('4-5-output.txt','w')
    for key in seq.keys():    #按fasta文件格式输出
            _str.append("%s%s\n"%(key,seq[key]))
    l.writelines(_str)
    l.close()
    这个程序好像没有解决反向输出的问题。。
    参考:seq[name][:-1]    没有试过不知道行不行ORZ


    输出基因信息表中特定的基因信息

    这里以本题为例:在基因的信息A文件中,找出B文件中存在的基因名的信息
    文件B中只包含基因名,这里讲文件B按行读取,保存在一个列表中,列表中的每一个元素对应一个基因名
    import os
    get_name=[]
    for _name in open('/home/miaoyr/perl_practice/test2_file/2.1name.txt'):
            get_name.append(_name.replace('\n',''))
    print get_name
    f=open('2-1-output.txt','w')
    for name in get_name:
            m_name="'$3~/^"+name+"/ {print $0}'"
            cmd="'awk' %s '/home/miaoyr/perl_practice/test2_file/2.1Predicted_Targets_Info.txt'" % m_name
            output=os.popen(cmd).readlines()
            f.writelines(output)
    f.close()
    

    由于当时脑子抽了,想用shell语言(程序都是在linux上编写的)python的交互来写。。。
    用了os.popen()函数实现和shell语言的awk命令交互,多此一举了。。
    变量传递的时候遇到了很大的问题,最后用字符串解决的。
    实现shell和python交互可用的函数主要由 os.popen()和os.system(),二者有一些区别。

    python比较简单的方法思路:
    将文件A按行读取,用split()函数分割。

    遍历B文件中的基因名,通过pattern正则表达式,在文件A读取的行中查找符合条件的基因信息并输出。
    问题:程序运行速度较慢,我也想不出更好的办法了QAQ
    以本题为例:同样是 在基因的信息A文件中,找出B文件中存在的基因名的信息,这里用python直接处理。
    get_id=[]
    for _id in open('/home/miaoyr/perl_practice/test2_file/2.2gene_id'):
            get_id.append(_id.replace('\n',''))    #文件B中只包含基因名,直接将基因名按行读取,保存在一个列表中,每一个元素为一个基因名
    info={}    #定义一个字典,键为基因名,值用于储存基因信息
    for l in open('/home/miaoyr/perl_practice/test2_file/2.2gene_DE_info'):
            ls=l.replace('\n','').split('\t')    #文件A中含有多种信息,用split()分开储存
            name=ls[0]
            info[name]=ls[1]
            for _id in get_id:    #遍历文件B中的基因名找到匹配的键
                    if _id==name:
                            print name,'\n',info[name]
    

    简单的数据筛选可直接用linux命令实现
    常用的包括 awk wc grep等

    awk真的。。超级好用

    以上题目对python的应用主要表现在
    文件的读取和写入

    输出格式化
    一些库和函数的简单应用

    我可能
    还没有入门ORZ
    展开全文
  • fasta多行文件处理

    2017-10-23 10:13:00
    1.创建fa文件,如下,命令为1.fa>SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC>POU5F1 ...
    1.创建fa文件,如下,命令为1.fa
    >SOX2    
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC
    ACGAGGGACGCATCGGACGACTGCAGGAC
    >POU5F1    
    CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT
    CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
    >NANOG    
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC
    ACGAGGGACGCATCGGACGACTGCAGG
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC
    ACGAGGGACGCATCGGACGACTGCAGGACTGT

    2.给>开头的行的行尾加上TAB键,以便隔开名字和序列,

    sed 's/^\(>.*\)/\1\t/' test.fasta | cat -A   > 2.fa(cat -A可以显示所有的符号)  ###  \(\)表示记录匹配的内容,\1则表示()中记录的匹配的内容(没怎么看懂这个命令)

    结果如下:

    >SOX2^I$
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
    ACGAGGGACGCATCGGACGACTGCAGGAC$
    >POU5F1^I$
    CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT$
    CGGAAGGTAGTCGTCAGTGCAGCGAGTCC$
    >NANOG^I$
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
    ACGAGGGACGCATCGGACGACTGCAGG$
    ACGAGGGACGCATCGGACGACTGCAGGACTGTC$
    

    3.把所有的换行符替换为空格,tr

    cat 2.fa  | tr '\n'   ' ' > 3.fa

    >SOX2     ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1     CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG     ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT

     

    4.把最后一个空格替换成换行符

    sed -e 's/ $/\n/' 3.fa > 4.fa

    5.把‘ >’替换成换行符(空格+>)

    sed -e 's/ >/\n>/g' 4.fa  > 5.fa

    >SOX2     ACGAGGGACGCATCGGACGACTGCAGGACTGTC   ACGAGGGACGCATCGGACGACTGCAGGACTGTC   ACGAGGGACGCATCGGACGACTGCAGGAC
    >POU5F1     CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT  CGGAAGGTAGTCGTCAGTGCAGCGAGTCC
    >NANOG     ACGAGGGACGCATCGGACGACTGCAGGACTGTC   ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT

    6.把所有的空格替换掉

    sed 's/  //g' 5.fa > 6.fa

    >SOX2    ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC
    >POU5F1    CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC
    >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT

    7.把TAB键转换为换行符

    sed 's/\t/\n/g'  6.fa > 7.fa

    >SOX2
    ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC
    >POU5F1
    CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC
    >NANOG
    ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT

     

    转载于:https://www.cnblogs.com/lmt921108/p/7714906.html

    展开全文
  • FASTApple用Applescript编写,是针对普通计算生物学家的一套实用程序,可快速轻松地处理FASTA文件。 基本而直接的GUI使选择文件变得轻而易举。 当前包括三个实用程序:FASTA Concatenater将多个FASTA文件组合到一个...
  • FASTA格式是一种基于文本用于表示核苷酸序列(或氨基酸序列)的格式。碱基对(或氨基酸)用单个字母来编码,且允许在序列前添加序列名及注释。 >gi|46575915|ref|NM_008261.2| Mus musculus hepatic nuclear ...
  • FASTA序列文件处理一网打尽

    千次阅读 2021-05-17 11:29:45
    一、小脚本大家可以在这里下载以下脚本:https://github.com/jorvis/biocode/tree/master/fasta各脚本作用信息如下:|--append_to_fasta_header.py每个序列ID添加后缀|--check_for_embedded_fasta_he...
  • //叠合两个 PE FASTA/Q 文件 trimfq trim FASTQ using the Phred algorithm //使用Phred 算法修剪 FASTQ 文件 hety regional heterozygosity // 区域杂合性 gc identify high - or low - GC regions ...
  • FASTA文件主要用于存储生物的序列文件,例如基因组,基因的核酸序列以及氨基酸等,是最常见的生物序列格式,一般以扩展名fa,fasta,fna等。fasta文件中,第一行是由大于号">"开头的任意文字说明,用于序列标记,...
  • 前面我们介绍了fastq格式文件的处理,大概有20多个案例,掌握了这些...1 文件格式介绍FASTA文件主要用于存储生物的序列文件,例如基因组,基因的核酸序列以及氨基酸等,是最常见的生物序列格式,一般以扩展名fa,fas...
  • FNA:处理FNA文件的某些功能(Fasta和Newick)
  • 使用Python对fasta格式的序列进行基本信息统计预期设计输出文件中包括fasta文件名,序列长度,GC含量以及ATCG各自的含量。Python脚本编辑使用的文件test.fastastat.py输入 sys模块#!/usr/bin/env pythonimport sys从...
  • 使用python读取和分析fasta文件

    千次阅读 2019-12-05 20:28:49
    分享一些处理fasta文件的python函数
  • Python读取fasta文件

    千次阅读 2019-04-23 22:13:27
    AMPs.fasta文件格式: >AP00001 |antibacterial |anticancer/tumor |antifungal GLWSKIKEVGKEAAKAAAKAAGKAALGAVSEAV >AP00004 |antibacterial |antifungal ...
  • I am trying to parse a large fasta file and I am encountering out of memory errors. Some suggestions to improve the data handling would be appreciated. Currently the program correctly prints out the n...
  • FASTA文件分割

    千次阅读 2019-10-04 20:48:56
    FASTA格式是一种用于记录序列的文本格式,在生信分析中经常会用到.fasta文件中往往储存成千上万条序列,而在某些时候,需要对文件进行分割,如分割成每个序列一个文件,或分割成较小的fasta文件 假如有如下数据: ...
  • fasta数据处理

    2021-07-14 15:13:44
    文档
  • 利用Python读取fasta文件并进行一系列操作(上) 概述 语言:python3.8 模块:pysam collections 可选:jupyter 整体思路:将fasta格式的基因原始数据处理为方便读写的txt格式并进行操作 步骤: 获取自己的fasta...
  • # !/usr/bin/python # -*- coding:utf-8 -*- from Bio import ..../new.fasta " , " fasta " ) handle.close()   转载于:https://www.cnblogs.com/lmt921108/p/8022973.html
  • fr=open('data/dna-binding.fasta', 'r') #读文件 fw=open('data/out.fasta', 'w') #写文件 seq={} for line in fr: if line.startswith('>'): #判断字符串是否以‘>开始’ name=line.split
  • 这种格式的pyparsing解析器只有几行。请参阅以下代码中的注释:data = """>1 (PB2)...
  • ![图片说明](https://img-ask.csdn.net/upload/202010/04/1601812708_310419.png)![图片说明](https://img-ask.csdn.net/upload/202010/04/1601812719_342862.png)
  • 我有一个fasta文件(第一个序列在下面提到)与长描述。我需要选择特定的描述字段。当我使用下面的代码时;整个描述进入字符串。from Bio import SeqIOfor record in SeqIO.parse("geneTemp.fasta", "fasta") :id=record...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,653
精华内容 661
关键字:

fasta文件处理