Hat Python eine eingebaute Funktion für unindenting ein multiline-string?
Sagen, ich habe die Zeichenfolge
s = """
Controller = require 'controller'
class foo
view: 'baz'
class: 'bar'
constructor: ->
Controller.mix @
"""
Jede Zeile in der string hat jetzt eine Globale 4 space Einrückung. Wenn diese Zeichenfolge erklärt wurde, innerhalb einer Funktion, es hätte eine 8 Raum Globale Einrückung, etc.
Funktioniert die Python eine Funktion für das entfernen der globalen linken Einzug der Schnur?
Möchte ich, dass die Funktion Ausgabe:
Controller = require 'controller'
class foo
view: 'baz'
class: 'bar'
constructor: ->
Controller.mix @"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht eine eingebaute Funktion, sondern eine Funktion in der standard library:
Textumfluss.dedent()
textwrap.dedent(s)
beginnt mit einem Zeilenumbruch und das ist nicht die Frage durch die OP.s = """\
,dedent
produziert nicht das erste leere Zeile.textwrap.dedent()
ist in der Nähe, was Sie wollen, aber es nicht umsetzen, was Sie gefragt haben, weil es ein führenden newline. Sie können entweder wickelndedent
in eine Funktion, die Streifen der führenden newline auss
:Jedoch
textwrap.dedent()
Griffe Linien mit nur Leerzeichen in besonderer Weise, das ist OK, wenn Sie bei der Generierung von Python-Quelltext aus einen Einzug mehrzeilige Anweisung, wobei nachfolgende Leerzeichen ist unbedeutend.Aber im Allgemeinen ist es unpassend, dass
textwrap.dedent()
entfernt zusätzliche Leerzeichen, die aus Linien mit mehr whitespace als die maximale Gedankenstrich', entfernt whitespace-Zeichen werden alle whitespace-Zeichen Linien und, dass es descards alle whitespace-Zeichen vor dem schließenden"""
, zumal dieses Verhalten ist ohne Papiere und mit non-transparent reguläre Ausdrücke.Da ich auch generieren nicht-Python-source-code, wo Räume Häufig erheblichen verwende ich folgende routine. Es funktioniert nicht mit TAB-Einrückungen, aber es gibt Sie, die Ausgabe, die Sie fragte, ohne führende newline, wo
textwrap.dedent()
ausfällt.Ich weiß, diese Frage wurde bereits beantwortet, aber es gibt auch diese Möglichkeit: