Mit iPython versuche ich, alle Textdateien in einem Verzeichnis zu durchlaufen, eine Operation für jede Textdatei (Beschneiden eines Teils der Textdatei nach der Zeile beginnend mit "BEGIN") und dann Speichern Sie die Ergebnisse in einer anderen temp.txt. Wenn ich jedoch !cat file_path
mache, dauert es nicht file_path
als das Verzeichnis und es interpretiert es als eine Zeichenfolge mit dem Namen 'file_path'
statt. Gibt es trotzdem, dass ich die Zeichenfolge file_path
in ein literales Verzeichnis konvertieren kann, dass es von !cat
verwendet werden kann?Konvertieren von Zeichenfolgen in Literalverzeichnisse
import os
for fn in os.listdir('./dir'):
if fn.endswith('.txt'):
file_path='./dir'+fn
print "file path is:", file_path
!cat file_path | sed -e '1,/BEGIN/d'>temp.txt
Ausgänge:
file path is: ~/Documents/dir/doc.txt
cat: file_path: No such file or directory
Soweit ich weiß, kann man '! Cat' nicht einfach einfügen, um zu entkommen und einen Shell-Befehl auszuführen. Sie müssten 'subprocess.Popen' oder etwas ähnliches verwenden. Warum nicht einfach mit Python zuschneiden oder alles in der Shell tun, anstatt sie auf diese Weise zu mischen? (Dies hat auch einen "nutzlosen Gebrauch der Katze") Ist das IPython und deshalb funktioniert das '!'? Sie wollen wahrscheinlich nicht '/ Dokumente', sondern' ~/Dokumente', die ich schätzen würde? – beroe
Ich fand es sauberer auf diese Weise beide zu mischen. Aber ja, es ist nur in Python/Unix möglich. Und ja, das ist iPython und es ist möglich, an jedem Punkt mit Hilfe von Unix umzuschalten! Zeichen und das richtige Verzeichnis ist ~/Dokumente. – Peyman
Vielleicht fügen Sie das Tag 'IPython' hinzu – beroe