从FASTA文件创建字典

时间:2017-03-16 01:05:27

标签: python fasta

我有一个看起来像这样的文件:

  

%Labelinfo

     

字符串1

     

字符串2

     

%Labelinfo2

     

STRING3

     

串,4

     

STRING5

我想创建一个字符串,其键是一个字符串,即%Labelinfo,以及值,它是从一个Labelinfo到下一个Labelinfo的字符串的串联。基本上这个:

{%Labelinfo:string1 + string2,%Labelinfo:string2 + string3 + string4}

问题是两个" Labelinfo"之间可以有任意数量的行。线。例如,%Labelinfo与%Labelinfo2之间可以是5行。然后,在%Labelinfo2到%Labelinfo3之间,可以说是4行。

然而,包含" Labelinfo"始终以相同的字符开头,例如%。

如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

以下是我的写作方式:

程序循环遍历文件中的每一行。检查该行是否为空,如果是,则忽略它。如果它不是空的,那么我们处理该行。任何在开头都有%的东西表示一个变量,所以让我们继续将它添加到字典中并将其设置为变量current。然后,我们继续在密钥current添加到字典,直到下一个%

di = {}
with open("fasta.txt","r") as f:
    current = ""
    for line in f:
        line = line.strip()
        if line == "":
            continue
        if line[0] == "%":
            di[line] = ""
            current = line
        else:
            if di[current] == "":
                di[current] = line
            else:
                di[current] += "+" + line
print(di)

输出:

{'%Labelinfo2': 'string3+string4+string5', '%Labelinfo': 'string1+string2'}

注意:字典不会强制执行错误,因此它们会出现故障;但同样可以访问。而且,只是抬头,你的示例输出有点错误,你忘了在%Labelinfo之一后放入2

答案 1 :(得分:0)

导入重新

d = {}

text = open(' fasta.txt')。read()

对于el在[x for x in re.split(r' \ s +',text)中如果x]:

if el.startswith('%'):
    key = el
    d[key] = ''
else:
    value = d[key] + el
    d[key] = value

打印(d)

{'%Labelinfo':' string1string2','%Labelinfo2':' string3string4string5'}

答案 2 :(得分:0)

#!/usr/bin/env python
# coding:utf-8
'''黄哥Python'''

d = {}

with open('Labelinfo.txt') as f:
    for line in f:
        if len(line) > 1:
            if '%Labelinf' in line:
                key = line.strip()
                d[key] = ""
            else:
                d[key] += line.strip() + "+"

d = {key: d[key][:-1] for key in d}
print d

{'%Labelinfo2':'string3 + string4 + string5','%Labelinfo':'string1 + string2'}