J'utilise Python 2.6.6 et je suis en train de retirer fastq
lit dans file2
qui se chevauchent (à savoir, sont identiques à) se lit dans file1
. Voici le code que je suis en train de mettre en œuvre:Supprimer un élément dans un dictionnaire généré par SeqIO.index
ref_reads = SeqIO.index("file1.fastq", "fastq")
spk_reads = SeqIO.index("file2.fastq", "fastq")
for spk in spk_reads:
if spk in ref_reads:
del ref_reads[spk]
Cependant, je reçois cette erreur lié à mon utilisation de del
:
AttributeError: instance _IndexedSeqFileDict n'a pas d'attribut '__delitem__'
Est -il possible de supprimer un élément en utilisant la formulation actuelle? Comment puis-je supprimer un élément d'un dictionnaire généré à l'aide de SeqIO.index()
?
J'ai aussi essayé ce qui suit:
# import read data
ref_reads = SeqIO.index("main.fastq", "fastq")
spk_reads = SeqIO.index("over.fastq", "fastq")
# note that ref_reads.keys() doesn't return a list but a 'dictionary- keyiterator',
# so we turn it into a set to work with it
ref_keys = set(ref_reads.keys())
spk_keys = set(spk_reads.keys())
# loop to remove overlap reads
for spk in spk_keys:
if spk in ref_keys:
del ref_keys[spk]
# output data
output_handle = open(fname_out, "w")
SeqIO.write(ref_reads[ref_keys], output_handle, "fastq")
output_handle.close()
Thnk pour le conseil utile. La première solution a fonctionné, mais elle était lente par rapport au code que j'essaie d'améliorer. Pourriez-vous s'il vous plaît fournir des informations supplémentaires concernant votre deuxième bloc de code? J'essaye de supprimer des lectures de file1.fastq qui sont également dans file2.fastq. Basé sur votre deuxième solution, comment puis-je résoudre à nouveau le problème original de la suppression des éléments de SeqIO.index ("file1.fastq", "fastq")? J'ai mis à jour la question pour refléter ma dernière tentative. – wa3j
@ wa3j: voir mon édition ci-dessus. – BioGeek