2016-01-15 6 views
0

Lorsque vous utilisez le module pysam Je suis en train de rediriger stdout vers un fichier comme suit:stdout redirection de fichier

bam=sys.argv[1] 
samfile = pysam.AlignmentFile(bam, "rb") 
for alignment in samfile: 
    reverse=isReverse(alignment.flag) 
    if (reverse): 
     outfile = pysam.AlignmentFile("-", "w", template=samfile) 
     with open('reverse.sam', 'w') as f: 
      with (f): 
       for s in samfile: 
        print('HEY') 
        outfile.write(s) 

Alors que le « print (« HEY ») » est écrit à reverse.sam le « outfile .write (s) "n'est pas. Que dois-je faire pour que ce soit?
Merci Mark

Répondre

0

ne devrait-il plutôt

for alignment in samfile.fetch() 

? Qu'est-ce que

type (alignment) 

rendement? Et quelle est votre intention avec le

with (f) 

supplémentaire contexte? :) D'après ce que vous avez posté, le contexte externe n'a déjà plus de sens.

0

C'est parti.

bam_file = sys.argv[1] # or '-' (if reading from stdin) or 'path/to/your/input.bam' 
sam_file = 'path/to/your/output.sam' # or '-' (if writing to stdout) or 'path/to/your/output.bam' (for bam file) 

infile = pysam.AlignmentFile(bam_file, "rb") 
outfile = pysam.AlignmentFile(sam_file, "w", template=infile) # or "wb" if writing to bam file 

i = 0 

for alignment in infile: 
    if alignment.is_reverse: 
     outfile.write(alignment) 
     i += 1 

outfile.close() 
infile.close() 
print("Wrote {} alignments.".format(i))