【问题标题】:Make a list in python from a FASTA text file从 FASTA 文本文件在 python 中创建一个列表
【发布时间】:2018-05-30 12:56:02
【问题描述】:

我有这样一个小例子的文本文件:

>ENST00000491024.1|ENSG00000187583.6|OTTHUMG00000040756.4|OTTHUMT00000097942.2|PLEKHN1-003|PLEKHN1|176
SLESSPDAPDHTSETSHSPLYADPYTPPATSHRRVTDVRGLEEFLSAMQSARGPTPSSPLPSVPVSVPASDPRSCSSGPAGPYLLSKKGALQSRAAQRHRGSAKDGGPQPPDAPQLVSSAREGSPEPWLPLTDGRSPRRSRDPGYDHLWDETLSSSHQKCPQLGGPEASGGLVQWI
>ENST00000433179.2|ENSG00000187642.5|OTTHUMG00000040757.3|-|C1orf170-201|C1orf170|696
MPTQDGQLRRPARPPGPRAWMEPRGGGSSQFSSCPGPASSGDQMQRLLQGPAPRPPGEPPGSPKSPGHSTGSQRPPDSPGAPPRSPSRKKRRAVGAKGGGHTGASASAQTGSPLLPAASPETAKLMAKAGQEELGPGPAGAPEPGPRSPVQEDRPGPGLGLSTPVPVTEQGTDQIRTPRRAKLHTVSTTVWEALPDVSRAKSDMAVSTPASEPQPDRDMAVSTPASEPQSDRDMAVSTPASEPQPDTDMAVSTPASEPQPDRDMAVSIPASKPQSDTAVSTPASEPQSSVALSTPISKPQLDTDVAVSTPASKHGLDVALPTAGPVAKLEVASSPPVSEAVPRMTESSGLVSTPVPRADAAGLAWPPTRRAGPDVVEMEAVVSEPSAGAPGCCSGAPALGLTQVPRKKKVRFSVAGPSPNKPGSGQASARPSAPQTATGAHGGPGAWEAVAVGPRPHQPRILKHLPRPPPSAVTRVGPGSSFAVTLPEAYEFFFCDTIEENEEAEAAAAGQDPAGVQWPDMCEFFFPDVGAQRSRRRGSPEPLPRADPVPAPIPGDPVPISIPEVYEHFFFGEDRLEGVLGPAVPLPLQALEPPRSASEGAGPGTPLKPAVVERLHLALRRAGELRGPVPSFAFSQNDMCLVFVAFATWAVRTSDPHTPDAWKTALLANVGTISAIRYFRRQVGQGRRSHSPSPSS
>ENST00000341290.2|ENSG00000187642.5|OTTHUMG00000040757.3|OTTHUMT00000097943.2|C1orf170-001|C1orf170|676
MEPRGGGSSQFSSCPGPASSGDQMQRLLQGPAPRPPGEPPGSPKSPGHSTGSQRPPDSPGAPPRSPSRKKRRAVGAKGGGHTGASASAQTGSPLLPAASPETAKLMAKAGQEELGPGPAGAPEPGPRSPVQEDRPGPGLGLSTPVPVTEQGTDQIRTPRRAKLHTVSTTVWEALPDVSRAKSDMAVSTPASEPQPDRDMAVSTPASEPQSDRDMAVSTPASEPQPDTDMAVSTPASEPQPDRDMAVSIPASKPQSDTAVSTPASEPQSSVALSTPISKPQLDTDVAVSTPASKHGLDVALPTAGPVAKLEVASSPPVSEAVPRMTESSGLVSTPVPRADAAGLAWPPTRRAGPDVVEMEAVVSEPSAGAPGCCSGAPALGLTQVPRKKKVRFSVAGPSPNKPGSGQASARPSAPQTATGAHGGPGAWEAVAVGPRPHQPRILKHLPRPPPSAVTRVGPGSSFAVTLPEAYEFFFCDTIEENEEAEAAAAGQDPAGVQWPDMCEFFFPDVGAQRSRRRGSPEPLPRADPVPAPIPGDPVPISIPEVYEHFFFGEDRLEGVLGPAVPLPLQALEPPRSASEGAGPGTPLKPAVVERLHLALRRAGELRGPVPSFAFSQNDMCLVFVAFATWAVRTSDPHTPDAWKTALLANVGTISAIRYFRRQVGQGRRSHSPSPSS
>ENST00000428771.2|ENSG00000188290.6|OTTHUMG00000040758.2|OTTHUMT00000097945.2|HES4-002|HES4|247
MAADTPGKPSASPMAGAPASASRTPDKPRSAAEHRKVGSRPGVRGATGGREGRGTQPVPDPQSSKPVMEKRRRARINESLAQLKTLILDALRKESSRHSKLEKADILEMTVRHLRSLRRVQVTAALSADPAVLGKYRAGFHECLAEVNRFLAGCEGVPADVRSRLLGHLAACLRQLGPSRRPASLSPAAPAEAPAPEVYAGRPLLPSLGGPFPLLAPPLLPGLTRALPAAPRAGPQGPGGPWRPWLR

这个文件被分成不同的组。每组有2个部分。第一部分以">" 开头,这部分中的元素由"|" 分割,之后的行是第二部分。我正在尝试从我的文件中创建一个 Python 列表,该文件具有每个组的 ID 部分的第 6 个元素。这是小示例的预期输出:

list = ["PLEKHN1", "C1orf170", "C1orf170", "HES4"]

我正在尝试首先导入字典,然后使用以下命令制作一个类似于预期输出的列表:

from itertools import groupby
with open('infile.txt') as f:
    groups = groupby(f, key=lambda x: not x.startswith(">"))
    d = {}
    for k,v in groups:
        if not k:
            key, val = list(v)[0].rstrip(), "".join(map(str.rstrip,next(groups)[1],""))
            d[key] = val

k = d.keys()
res = [el[5:] for s in k for el in s.split('|')]

但它不会返回我正在寻找的内容。你知道怎么解决吗?

【问题讨论】:

  • “它没有返回我正在寻找的东西”你能在你的问题中解释你得到了什么吗?
  • 我们是否可以假设该文件与您的示例完全相同,或者您是否对其进行了修改以便向我们展示?
  • 这看起来太复杂了。所需的输出可以通过像[line.split('|')[5] for line in f if line.startswith('>')] 这样简单的东西来获得。这是您需要的还是您没有提到的其他复杂情况?
  • 您可能应该注释您的代码。比如if not k的目的是什么?

标签: python bioinformatics biopython fasta


【解决方案1】:

由于这些显然是FASTA格式的蛋白质序列,我建议您使用Biopython,它会节省您的时间并且比构建自己的解析器更强大:

from Bio import SeqIO

lst = [record.description.split('|')[5] for record in SeqIO.parse('in_file.fasta', 'fasta')]

print(lst)
# ['PLEKHN1', 'C1orf170', 'C1orf170', 'HES4']

【讨论】:

    【解决方案2】:

    试试这个: res = [s[5] for s in [el.split('|') for el in k]]

    输出: ['HES4', 'C1orf170', 'PLEKHN1', 'C1orf170']

    【讨论】:

      【解决方案3】:

      您可以通过读取文件中的每一行并仅选择以“>”开头的行来获取所需的标记。然后根据“|”拆分结果字符并取第 6 个元素。这段代码在一行中完成了

        with open('infile.txt') as f:
              tokens =[line.split('|')[5] for line in f.readlines() if line[0] == '>']
        print(tokens)
      

      【讨论】:

      猜你喜欢
      • 2013-12-19
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 2015-10-31
      • 2020-06-03
      • 2021-09-17
      相关资源
      最近更新 更多