修復

2013-07-14 30 views
0

查詢 「AAAAA-AAACAAA-AAAAAA」修復

參考 「AA-AATAAAAAAATAAAAAA」

在Python,我怎麼修復字符串(查詢)相對於參考串查詢中的破折號替換爲引用字符,引用字符串中的破折號會導致相應查詢字符中的刪除?

「AAAAA-AAACAAA-AAAAAA」 應該成爲

「AAAATAAACAAATAAAAAA」 (其中此處括號 「AA()AA(T)AAACAAA(T)AAAAAA」 突出修飾字符)

下面是代碼可以修復查詢中的破折號相對於引用可能有用或不可用(行號是特定於文件,這裏不相關,我爲非pythonic代碼道歉!),但我無法修改查詢根據參考破折號....

if "Query identifier" in line: 
     Query = line[24:-12] 

     if "-" in Query: 
      indices = [i for i, x in enumerate(Query) if x == "-"] 
      QueryStringUntilFirstDash = Query[:indices[0]] 
      found = 2 

    if found ==2 and "Reference identifier" in line: 
     Ref = line[24:-12] 

     if len(indices) == 1: 
      QueryDashToEnd.append(Query[indices[0]+1:]) 
      print QueryStringUntilFirstDash+Ref[indices[0]]+str(QueryDashToEnd[0]) 
      del(A[:]) 

     else: 

      while y < len(indices): 
        y+=1 

        if y < len(indices): 

         DashesMiddleofQuery.append(Query[indices[y-1]:indices[y]]) 

         DashesMiddleofQuerySubstitution = [B.replace('-', Ref[indices[y-1]]) for B in B] 

         Concat= ''.join(B) 

      del(B[:]) 
      print UID 
      print Beg+str(Concat)+Query[indices[-1]+1:]+">1" 
      found = 0 
      y = 0 

回答

2

IIUC,這樣的事情可能工作:

>>> query = "AAAAA-AAACAAA-AAAAAA" 
>>> ref = "AA-AATAAAAAAATAAAAAA" 
>>> fixed = ''.join(r if q == '-' else '' if r == '-' else q 
...  for q,r in zip(query, ref)) 
>>> 
>>> fixed 
'AAAATAAACAAATAAAAAA' 

或者,如果你想邏輯推到一個函數:

>>> def fixer(q,r): 
...  if q == '-': 
...   return r 
...  if r == '-': 
...   return '' 
...  return q 
... 
>>> fixed = ''.join(map(fixer, query, ref)) 
>>> fixed 
'AAAATAAACAAATAAAAAA' 

我覺得它更容易認爲在對人物的條款,那些直接做什麼,而不是指數。

+0

哇,這比我的代碼稍好...(哈哈) 非常感謝,太簡單了,它太漂亮了! – Vince

+0

如果破折號的位置很重要,例如查詢和參考文獻之間的破折號小於彼此的X個空格,那麼不要更改? – Vince

+0

@Vince:爲此,我們必須涉及指數,這會稍微不夠優雅。這將是一個完全不同的問題。 – DSM