2016-07-17 11 views
4

TL; DR Ich möchte wissen, was eine Option in Python ist, die in etwa der "-pe" -Option in Perl entsprechen könnte.Gibt es etwas ähnlich wie "Perl -pe" -Option in Python?

Ich benutzte PERL für einige Zeit, aber in diesen Tagen habe ich für PYTHON wegen seiner Einfachheit und Einfachheit gewechselt. Wenn ich an der Shell-Eingabeaufforderung eine einfache Textverarbeitung durchführen musste, hatte ich die Option perl -pe verwendet. Das Folgende ist ein Beispiel.

grep foo *.txt | perl -pe 's/foo/bar/g' 

Um eine ähnliche Sache in Python zu tun, könnte mir jemand erklären, wie ich das tun kann?

+0

Check-out https://docs.python.org/3/using/cmdline. html – Sundeep

+1

Sie können auch Textverarbeitungsprogramme in der Shell wie sed und awk auschecken: http://unix.stackexchange.com/tags/text-processing/info – Sundeep

+0

Siehe auch http://stackoverflow.com/questions/7842919/python -equivalent-to-perl-pe – Ayman

Antwort

3

-pe ist eine Kombination aus zwei Argumenten, -p und -e. Die Option -e entspricht in etwa der Python-Option -c, mit der Sie Code für die Ausführung in der Befehlszeile angeben können. Es gibt kein Python-Äquivalent von -p, das effektiv Code hinzufügt, um Ihren übergebenen Code in einer Schleife auszuführen, die von der Standardeingabe liest. Um das zu erreichen, müssen Sie die entsprechende Schleife in Ihrem Code schreiben, zusammen mit dem Code, der von der Standardeingabe liest.

+0

Obwohl das Modul ['fileinput'] (https://docs.python.org/2/library/fileinput.html) viel von dem enthält, was Sie brauchen, um einen Einzeiler zu erstellen oder vielleicht Zweiliner. – tripleee

1

Perl, obwohl eine vollwertige Programmiersprache, wurde ursprünglich als Werkzeug für Textmanipulation gedacht und entwickelt.

Python, auf der anderen Seite, war schon immer eine allgemeine Programmiersprache. Es kann Text- und Textflexibilität mit enormer Flexibilität im Vergleich zu beispielsweise Java oder C++ verarbeiten, tut dies jedoch innerhalb seiner allgemeinen Syntax, ohne Ausnahmen zu diesen Regeln, einschließlich spezieller Syntax für reguläre Ausdrücke, bei Abwesenheit anderer Direktiven ein Programm für sich selbst werden. Das Gleiche gilt für das Öffnen, Lesen und Schreiben von Dateien mit ihren Namen.

Sie können das also mit "python -c ..." tun, um ein Python-Skript von der Kommandozeile aus auszuführen - aber Ihr Befehl muss ein vollständiges Programm sein - mit Anfang, Mitte und Ende.

Also, für eine einfache reguläre Ausdruck Substitution in mehreren Dateien im stdin übergeben, könnten Sie etwas zusammen versuchen:

grep foo *txt| python3 -c "import sys, re, os; [(open(filename + 'new', 'wt').write(re.sub ('foo', 'bar', open(filename).read())), os.rename(filename + "new", filename))for filename in sys.stdin]" 
Verwandte Themen