2017-03-16 151 views
0

我有一個看起來像這樣的文件:創建從FASTA文件字典

%Labelinfo

字符串1

字符串2

%Labelinfo2

STRING3

string4

STRING5

我想創建字典,有密鑰的字符串,它是%Labelinfo,和值,下一個字符串從一個Labelinfo串聯。基本上是這樣:

{%Labelinfo:字符串1 +字符串2,%Labelinfo:字符串2 + STRING3 +串,4}

問題是,可以存在任何數量的兩個 「Labelinfo」 行之間的行。例如,%Labelinfo到%Labelinfo2之間可以是5行。然後,在%Labelinfo2到%Labelinfo3之間就可以了,比方說4行。

但是,包含「Labelinfo」的行總是以相同的字符開頭,例如%。

我該如何解決這個問題?

+0

你可能想看看Biopython除非你真的喜歡滾動您自己。然後再次,這是一個奇怪的FASTA格式,它使用'%'而不是'>'。 –

回答

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 + +串,STRING5', '%Labelinfo': '字符串1 +字符串2'}

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

0

進口重新

d = {}

文本=開放( 'fasta.txt')。讀()

爲EL在[X在重新X。分裂(R '\ S +',文本)如果x]:

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

打印(d)

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