GenBank에서 GI 번호를 단계적으로 제거하고 다음 형식으로 헤더를 편집 한 위치에 여러 개의 fasta 파일이 저장된다는 경고가 계속 표시됩니다.파이썬에서 fasta 헤더의 해당 GI 번호에서 NCBI의 Accession 번호 받기
>SomeText_ginumber
나는 다음과 같이 심지어 헤더 파일을이로 시작하지만 방법이 이상적으로 파이썬 함께, 내가 NCBI에서 각 GI에 해당하는 가입 번호를 얻을 수 있음을 출력 할 생각도 없어 :
>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는 검색 문자열의 오른쪽에서 첫 번째 항목 (즉, 마지막 항목)을 찾습니다. 모든 헤더의 형식이 동일한 경우 모든 파일을 반복하고 새 파일에 새 헤더를 쓸 수 있습니다. 당신의 정규식 접근법은 또한 작동 할 수 있지만 나는 오진 (false positive) 여부를 먼저 검사 할 것입니다. 또한 오류를 피하고 잘못된 가입 번호를 지정하려면 레코드 수가 정확히 1인지 확인해야합니다. –
정말 대단합니다. 고마워요. 원래 게시물을 제안하고 업데이트 한 내용을 수정했습니다. 나는 지금 좋은 스크립트를 가지고있다! 마지막으로 한 가지 문제는 헤더 번호에 상관없이 gi 번호를 가입 번호로 대체하는 방법이 있습니까? 현재 GI 번호가 예를 들어 머리글의 시작 부분에있는 경우 여전히 행의 끝에 액자를 넣고 마지막 '_'이후에 있었던 항목을 제거합니다. – wl284