Wie formatiere ich einen Python-Code automatisch, um ihn korrekt zu formatieren?

78

Ich habe einen vorhandenen Code, der nicht konsistent formatiert ist - manchmal werden zwei Leerzeichen für den Einzug verwendet, manchmal vier und so weiter. Der Code selbst ist korrekt und gut getestet, aber die Formatierung ist schrecklich.

Gibt es einen Ort online, an dem ich einfach einen Ausschnitt aus Python-Code einfügen und ihn automatisch für mich einrücken / formatieren lassen kann? Gibt es eine Xsolche, mit der ich so etwas tun X --input=*.pyund jede Datei mit einer formatierten Version überschreiben kann?

John Feminella
quelle

Antworten:

54

Bearbeiten: Heutzutage würde ich autopep8 empfehlen , da es nicht nur Einrückungsprobleme behebt, sondern (nach Ihrem Ermessen) auch Code an viele andere PEP8-Richtlinien anpasst.


Verwenden Sie reindent.py. Es sollte mit der Standarddistribution von Python geliefert werden, obwohl Sie unter Ubuntu das python2.6-examplesPaket installieren müssen .

Sie können es auch im Internet finden .

Dieses Skript versucht, jedes Python-Skript so zu konvertieren, dass es dem 4-Leerzeichen-Standard entspricht.

unutbu
quelle
3
Perfekt. Vielen Dank! Ich habe benutzt find . -type f -name "*.py" | xargs python reindent.py --nobackup.
John Feminella
1
Unter Fedora müssen Sie das python-toolsPaket installieren , umreindent.py
JohnTESlade
Wo befindet es sich in Mavericks?
Avi
@avi: Normalerweise kannst du die Antwort hier nachschlagen , aber da Mavericks zu alt ist, schätze ich, dass es drin sein würde python2.7-examples.
Unutbu
1
Sie sollten blackdiese Tage empfehlen
Boris
84

autopep8

autopep8 formatiert Ihr Python-Skript automatisch. nicht nur die Codeeinrückung, sondern auch andere Codierungsabstandsstile. Dadurch wird Ihr Python-Skript dem PEP8 Style Guide angepasst.

pip install autopep8
autopep8 your_script.py    # dry-run, only print
autopep8 -i your_script.py # replace content

Aktualisieren:

Viele Editoren haben pep8-Plugins, die Ihren Code direkt nach dem Speichern der Datei automatisch neu formatieren. py-autopep8 in emacs

yapf

yapf ist ein neuer und besserer Python-Code-Formatierer. das versucht, die beste Formatierung zu erhalten, nicht nur um die Richtlinien zu entsprechen. Die Verwendung ist die gleiche wie bei autopep8.

pip install yapf
yapf your_script.py    # dry-run, only print
yapf -i your_script.py # replace content

Weitere Informationen, wie z. B. Formatierungskonfigurationen, finden Sie im README.rston yapf github


Update 2:

Schwarz

Schwarz ist viel besser als Yapf . Es ist intelligenter und passt zu den komplexesten Formatierungsfällen.

d2207197
quelle
[Webserver - ~ / scripts] $ autopep8 -i 2c.py [Webserver - ~ / scripts] $ python 2c.py Datei "2c.py", Zeile 9 aus request.adapters import HTTPAdapter ^ IndentationError: unerwarteter Einzug Funktioniert bei mir nicht ...
pkm
Python-Codeblöcke werden durch ihre Einrückung definiert. Das Korrigieren der Einrückung ist also nicht Ihre Aufgabe, sondern autopep8. Werkzeuge können und sollten die Einrückungsstufe nicht ändern.
d2207197
19

Verwenden Sie Schwarz . Es gibt bewusst nur eine Option (Zeilenlänge), um die Konsistenz über viele Projekte hinweg sicherzustellen. Es erzwingt PEP8.

nbedou
quelle
5
Sie können repl.it auch blackonline verwenden (wie vom OP angefordert): repl.it/repls/BriefBetterSystemcall
damio
5

Mit PyCharm eine Offline-Lösung gefunden

In PyCharm tun Sie:

1. Wählen Sie den gesamten Code aus:

[ctrl]+[A]

2. Formatieren Sie den gesamten Code

[ctrl]+[alt]+[L]
mrk
quelle
Welcher Knopf ist [strg]?
Stevoisiak
2

Einige Editoren verfügen über eine automatische Formatierungsfunktion, die dies für Sie erledigt. Eclipse ist ein Beispiel (obwohl Sie wahrscheinlich ein Python-Plug-In installieren müssten).

Haben Sie überprüft, welchen Editor Sie für eine solche Funktion verwenden?

Chris
quelle
+1 für die automatische Formatierung von Eclipse. Öffnen Sie einfach die Datei und speichern Sie sie erneut in Eclipse. Es wird den Einzug korrigieren, fehlerhafte Leerzeichen zwischen Klammern und Argumenten löschen, Leerzeichen nach Kommas in Listen und Argumenten hinzufügen, korrekte Abstände um "=" - Zeichen hinzufügen und alle anderen PEP 8-Elemente.
1
Nein, wird es nicht. Die sofort einsatzbereite Eclipse-Formatierung funktioniert nicht mit Python-Skripten, auch nicht mit PyDev, das unverändert installiert ist.
Luis.espinal
1
Wer auch immer meinen Kommentar negiert, mich als falsch erweist oder mich erneut negiert, was auch immer Ihr Boot rockt.
Luis.espinal