从FASTA fi创建词典

2024-06-28 19:31:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件是这样的:

%Labelinfo

string1

string2

%Labelinfo2

string3

string4

string5

我想创建一个字典,它的键是%Labelinfo的字符串,值是从一个Labelinfo到下一个Labelinfo的串接。基本上是这样:

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

问题是两个“Labelinfo”行之间可以有任意数量的行。例如,在%Labelinfo到%Labelinfo2之间可以有5行。那么,在%Labelinfo2到%Labelinfo3之间可以是4行。在

但是,包含“Labelinfo”的行总是以相同的字符开头,例如%。在

我怎么解决这个问题?在


Tags: 文件字符串数量字典字符string1string2string3
3条回答
#!/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”}

进口re

d={}

文本=打开('法斯塔.txt').read()

对于el in[x for x in重新分割(r'\s+',文本)如果x]:

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

打印(d)

{“%Labelinfo”:“string1string2”,“%Labelinfo2”:“string3string4string5”}

我是这样写的:

程序循环遍历文件中的每一行。检查该行是否为空,如果为空,则忽略它。如果不为空,则处理该行。任何开头带有%的都表示一个变量,所以让我们继续把它添加到字典中,并将其设置为一个变量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)

输出:

^{pr2}$

注意:字典不强制执行错误,因此它们将是无序的;但仍然可以以相同的方式访问。而且,请注意,您的示例输出有点错误,您忘记在其中一个%Labelinfo之后输入2。在

相关问题 更多 >