GenBankでGI番号を段階的に削除していて、次の形式でヘッダーを編集した場所にいくつかのfastaファイルが保存されています。Pythonのfastaヘッダーの対応するGI番号からNCBIのアクセッション番号を取得
>SomeText_ginumber
次のように私はNCBIおよび出力から各GIのためのヘッダーを持つファイルを、対応するアクセッション番号を取得することができることを、理想的にはPythonで、私もこれで始めるには考えてきませんが、方法があります:
>SomeText_accessionnumber
別のexaファイル形式のmple:
>Desulfovibrio_fructosivorans_ferredoxin_492837709
MTKSVAPTVTIDGKVVPIEGERNLLELIRKVRIDLPTFCYHSELSVYGACRLCLVEVKNRGIMGAC
>Oxalobacteraceae_bacterium_AB_14_hypothetical_protein_522195384
MIKLTVNGIPVEVDEGATYLDAANKAGVHIPTLCYHPRFRSHAVCRMCLVHVAGSSRPQAACIGKA
編集/更新:
from Bio import Entrez
from time import sleep
import sys
import re
Entrez.email = ''
seqs = open(sys.argv[1],"r")
for line in seqs:
if line.startswith('>'):
gi = re.findall("\d{5,}",line)
matches = len(gi)
#print(matches)
if matches < 2:
if gi:
handle = Entrez.efetch(db="nucleotide", id=gi, retmode="xml")
records = Entrez.read(handle)
print(line[0:line.rfind('_') + 1] + records[0]['GBSeq_primary-accession'])
sleep(1)
elif matches >= 2:
print("Error - More than one ginumber in header!")
break
else:
seq=line.rstrip()
print(seq)
else:
seq1=line.rstrip()
print(seq1)
本当に役に立ちました。私はちょうどちょうどこれがたくさんの助けになるように、カンマで区切られたgi番号のリストからアクセッションを取り出す方法を研究しました。 私は正規表現を使用してジムマーを得ることを考えていました。 '[0-9] {4、}'それから、ギンナムのないfastaのエントリがあったかどうかは関係ありませんか? 私は[line.rfind( '_')+ 1:]が '_'の最後のインスタンスの後の文字列をとっていると思いますか? – wl284
あなたは間違いなしです。 rfindは、検索文字列の右から最初に出現するもの、すなわち最後の出現を検索します。 ヘッダーの形式がすべて同じ場合は、すべてのファイルをループして新しいヘッダーを新しいファイルに書き込むことができます。あなたの正規表現のアプローチもうまくいくかもしれませんが、私が最初に偽陽性を確認するでしょう。また、レコードの数が正確に1であるかどうかをチェックすることは、エラーを回避し、誤ったアクセッション番号を割り当てるために必須である。 –
それは素晴らしいです、ありがとう。元の投稿を提案して更新しました。私は今、素敵な便利なスクリプトを持っています! 最終的な問題は、ヘッダーのどこにあっても、GI番号を登録番号に置き換える方法はありますか?現在のところ、GI番号がヘッダの先頭にある場合は、それでも行頭にアクセス権を置き、最後の '_'の後にあったものを削除します。 – wl284