j'ai un fichier FASTA comme suit:lignes Concaténation à une chaîne en python
>scaf1
AAAAAATGTGTGTGTGTGTGYAA
AAAAACACGTGTGTGTG
>scaf2
ACGTGTGTGTGATGTGGY
AAAAAATGTGNNNNNNNNYACGTGTGTGTGTGTGTACACWSK
>scaf3
AAAGTGTGTTGTGAAACACACYAAW
Je veux le lire dans un dictionnaire dans une suite que plusieurs lignes appartenant à une séquence aller à une touche, la sortie serait:
{'scaf1': 'AAAAAATGTGTGTGTGTGTGYAAAAAAACACGTGTGTGTG', 'scaf2': 'ACGTGTGTGTGATGTGGYAAAAAATGTGNNNNNNNNYACGTGTGTGTGTGTGTACACWSK', 'scaf3': 'AAAGTGTGTTGTGAAACACACYAAW'}
Le script que je l'ai écrit est:
import sys
from collections import defaultdict
fastaseq = open(sys.argv[1], "r")
def readfasta(fastaseq):
fasta_dict = {}
for line in fastaseq:
if line.startswith('>'):
header = line.strip('\n')[1:]
sequence = ''
else:
sequence = sequence + line.strip('\n')
fasta_dict[header] = sequence
return fasta_dict
fastadict = readfasta(fastaseq)
print fastadict
Il fonctionne correctement et rapide pour un tel fi mais quand la taille du fichier augmente (c'est-à-dire environ 1,5 Gb), alors cela devient trop lent. L'étape qui prend du temps est la partie concaténation du sequence
. Je me demandais s'il y avait une façon plus rapide de concaténer les lignes à une seule chaîne?
séquence Peut-être que '+ = line.strip (...)' sera plus rapide, parce qu'ici vous n'êtes pas extraire la valeur de ' sequence', en lui ajoutant des données, puis en l'assignant à 'sequence' à nouveau. Juste '+ =' et c'est tout. – ForceBru
Juste changé dans mon script, il a en effet augmenté la vitesse, merci! – Homap