Verkettung Mehrerer .fasta-Dateien

Ich versuche zu verketten Hunderte von .fasta-Dateien in eine einzige, große fasta Datei mit allen Sequenzen. Ich habe nicht gefunden, die eine bestimmte Methode, dies zu erreichen in den Foren. Ich habe in diesem code aus http://zientzilaria.heroku.com/blog/2007/10/29/merging-single-or-multiple-sequence-fasta-files, die ich angepasst habe, ein bisschen.

Fasta.py die den folgenden code enthält:

class fasta:
    def __init__(self, name, sequence):
        self.name = name
        self.sequence = sequence

def read_fasta(file):
    items = []
    index = 0
    for line in file:
        if line.startswith(">"):
           if index >= 1:
               items.append(aninstance)
           index+=1
           name = line[:-1]
           seq = ''
           aninstance = fasta(name, seq)
        else:
           seq += line[:-1]
           aninstance = fasta(name, seq)

    items.append(aninstance)
    return items

Und hier ist das angepasste Skript zu verketten .fasta-Dateien:

import sys
import glob
import fasta

#obtain directory containing single fasta files for query
filepattern = input('Filename pattern to match: ')

#obtain output directory
outfile = input('Filename of output file: ')

#create new output file
output = open(outfile, 'w')

#initialize lists
names = []
seqs = []

#glob.glob returns a list of files that match the pattern
for file in glob.glob(filepattern):

    print ("file: " + file)

    #we read the contents and an instance of the class is returned
    contents = fasta.read_fasta(open(file).readlines())

    #a file can contain more than one sequence so we read them in a loop
    for item in contents:
        names.append(item.name)
        seqs.append(item.sequence)

#we print the output
for i in range(len(names)):
    output.write(names[i] + '\n' + seqs[i] + '\n\n')

output.close()
print("done")

Es ist in der Lage zum Lesen der fasta-Dateien, sondern die neu erstellte Ausgabedatei enthält keine Sequenzen. Die Fehler ich erhalte, ist aufgrund der fasta.py,, das ist jenseits meiner Fähigkeit zu Chaos mit:

Traceback (most recent call last):
  File "C:\Python32\myfiles\test\3\Fasta_Concatenate.py", line 28, in <module>
    contents = fasta.read_fasta(open(file).readlines())
  File "C:\Python32\lib\fasta.py", line 18, in read_fasta
    seq += line[:-1]
UnboundLocalError: local variable 'seq' referenced before assignment

Irgendwelche Vorschläge? Danke!

  • Können Sie ein paar Zeilen drucken von input und erwarteten output? @Steve die linke eine Antwort, wie zum verketten von Dateien, das ist, was deine Frage war.
InformationsquelleAutor user1426421 | 2012-07-30
Schreibe einen Kommentar