Search code examples
pythonappendincrement

How to write increment only once in a file?


I read multiple files using for-loop and append output in separate files using the below code. what I am looking for is not to print the line after the count+=1 (pls see below) every time for each iteration except the final iteration.

output.write(file_name + ": The total number of reads with two AB sequences is " +
             str(count) + '\n')

Is there a way to print the final count+=1 only once at the end of the output file based on my code?

from Bio import SeqIO

files=['2_.fasta','4_.fasta']

for file_name in files:
    count=0
    with open(file_name,'r') as f:
        for record in SeqIO.parse(f,'fasta'):
            #some code
            if str(v1) in record.seq and str(v2) in record.seq:
                #some code
                out = "sample" + file_name[:1] + "_two_AB.txt"
                with open(out,'a') as output:
                    output.write(file_name + '\n')
                    output.write(">"+str(record.id) + '\n')
                    count+=1
                    output.write(file_name + ": The total number of reads with two AB sequences is " 
                                 + str(count) + '\n')

output.close()

Solution

  • I hope this helps (if i understood your question):

    In this code i have used a list with a tuple to save the information such as out,file_name, record.id and count. After i have used this list in a for to copy the data, present into list, into corresponding file.

    My code:

    from Bio import SeqIO
    
    files=['2_.fasta','4_.fasta']
    my_list=[]
    
    for file_name in files:
        count=0
        with open(file_name,'r') as f:
            for record in SeqIO.parse(f,'fasta'):
                #some code
                if str(v1) in record.seq and str(v2) in record.seq:
                    #some code
                    out = "sample" + file_name[:1] + "_two_AB.txt"
                    with open(out,'a') as output:
                        output.write(file_name + '\n')
                        output.write(">"+str(record.id) + '\n')
                        count+=1
                        my_list.append(tuple((out,file_name,str(record.id),count)))
                        #output.write(file_name + ": The total number of reads with two AB sequences is " 
                        #             + str(count) + '\n')
    
        output.close()
        #Alternative
            #for idx,val enumerate(my_list):
            #    my_out=val[0] # I have out value
            #    my_file_name=[1] # I have the file_name value
            #    my_record=val[2] # I have the record.id value
            #    my_count=val[3] # I have the count value
            #    with open(my_out, 'a') as output:
            #        output.write(my_file_name + '\n')
            #        output.write(">"+ my_record + '\n')
                    #output.write(my_file_name + ": The total number of reads with two AB sequences is "+ str(my_count))
            #    output.close()
        
    # -1 in this list is the last file
    # my_list[-1][0] Here I have out es."sample" + file_name[:1] + "_two_AB.txt"
    # my_list[-1][1] Here I have the file_name
    # my_list[-1][2] Here I have the record.id
    # my_list[-1][3] Here I have the count    
    with open(my_list[-1][0], 'a') as output: # my_list[-1][0] is the last file, I have value's "out"
         #output.write(my_list[-1][1] + '\n') #my_list[-1][1] i have my_file_name
         #output.write(">"+ my_list[-1][2] + '\n') #my_record
         output.write(my_list[-1][2] + ": The total number of reads with two AB sequences is "+ str(my_list[-1][3]))
         output.close()