Ich habe über 14000 Fasta-Dateien, und ich möchte nur diejenigen, die 5 Sequenzen enthalten. Ich weiß, dass ich den folgenden bash Befehl verwenden kann, um die Anzahl der Sequenzen in einer einzigen fasta-Datei zu erhalten:Verwenden von Python Subprozess.Call zum Schreiben der Anzahl der Fasta-Sequenzen in Datei
grep -c "^>" filename.fasta
Also mein Ansatz, die die Dateinamen und Anzahl der Sequenzen in jeder Datei in eine Textdatei zu schreiben war, die Ich könnte dann nur die gewünschten Sequenzen isolieren. Um auf so viele Dateien mit dem grep Befehl ausführen, ich bin mit subprocess.call:
import subprocess
import os
with open("five_seqs.txt", "w") as f:
for file in os.listdir("/Users/vivaksoni1/Downloads/DA_CDS/fasta_files"):
f.write(file),
subprocess.call(["grep", "-c", "^>", file], stdout = f)
Teil meines Problems ist, dass der Befehl grep ist „^>“, aber subprocess erfordert jedes Argument, um seine eigenen Anführungszeichen haben . Wie kann ich "^>" verwenden, wenn ich im Wesentlichen als Argument eintreten würde: "" ^> "".
Muss ich auch f.write ("\ n") nach f.write (file) hinzufügen? Derzeit ist meine Ausgabe nur eine Textdatei mit jedem Eintrag nebeneinander, und der Unterprozessbefehl druckt nur jeden Dateinamen auf dem Terminal und gibt keine Datei als solche an:
grep: MZ23900789.fasta: Keine solche Datei oder Verzeichnis
haben Sie versucht: 'shell = True 'auf der' subprocess.call() '? Beispiel: 'subprocess.call ([" grep "," -c "," ^> ", Datei], stdout = f, shell = True)' –
Hallo, ich habe das leider erfolglos versucht. Der Befehl grep wird immer noch nicht in die Datei geschrieben, und ich bekomme diese Ausgabe für jede Datei an das Terminal: usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-Anum] [-Bnum] [-C [num]] \t [-e Muster] [-f Datei] [- Binärdateien = Wert] [--color = wenn] \t [--kontext [= num]] [--directories = Aktion] [-] [--line-gepuffert] \t [--null] [Muster] [Datei ...] – spiral01
bekomme eine Datei, nur um zu testen: 'grep -c '^>' fasta_file '.. funktioniert es, wenn tut es, dann versuche: 'subprocess.call ([" grep "," -c "," '^>' ", Datei], stdout = f, shell = True)' Sonst stimmt etwas anderes nicht, sezieren und testen Sie das Ruf an jeder Ecke. 'pdb' ist dein Freund -' ipdb' ist dein BESTER Freund –