我有一个看起来像这样的文件:
%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"始终以相同的字符开头,例如%。
如何解决这个问题?
答案 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'}