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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, mit
python
für diesen job ist übertrieben. Auf der Kommando-Zeile eine schnelle Möglichkeit zum verketten von single/multiple fasta-Dateien mit den.fasta
oder.fa
Erweiterungen ist einfach:Das problem ist in
fasta.py
:Versuchen initialisieren
seq
vor Beginn derread_fasta(file)
.EDIT: Weitere Erläuterung
Beim ersten Aufruf
read_fasta
die erste Zeile in der Datei beginnt nicht mit>
, so Sie fügen Sie die erste Zeile der stringseq
die nicht initialisiert werden dennoch (auch nicht deklariert): Sie sind gefolgt von einem string (die erste Zeile) auf einen null-Wert. Der Fehler in der Aufrufliste vorhanden, erklärt das problem:seq = ''
nachindex = 0
Kein python-Programmierer, aber es scheint, dass die Frage code versucht zu verdichten, um die Daten für jede Sequenz in einer einzigen Zeile, die auch separate Sequenz mit einer leeren Zeile.
werden würde
Ist dies in der Tat erforderlich, die Katze basierte Lösung oben würde nicht funktionieren. Ansonsten ist die Katze ist die einfachste und effektivste Lösung.
Für windows OS via Eingabeaufforderung: (Hinweis-Ordner sollten nur benötigte Dateien) :
Genießen.
Folgenden wird sichergestellt, dass neue Dateien beginnen stets auf einer neuen Zeile:
Die Lösung mit
cat
vielleicht nicht auf, dass: