TLDR;
Springe gerade nach unten und schaue dir die Beispiele 1 und 4 unten an.
Vollständige Antwort:
Ich habe letzte Woche (Oktober 2020) kaum etwas über das Python- textwrapModul mit seiner wirklich praktischen textwrap.dedent()Funktion gelernt , und da es seit Python 2.7 existiert , kann ich nicht glauben, dass es nicht beliebter ist!
Die Verwendung textwrap.dedent()eines mehrzeiligen Strings löst alle Probleme meiner vorherigen Antwort !
textwrap.dedent(text)
Entfernen Sie alle gemeinsamen führenden Leerzeichen aus jeder Textzeile.
Dies kann verwendet werden, um Zeichenfolgen in dreifachen Anführungszeichen am linken Rand der Anzeige auszurichten und sie dennoch im Quellcode in eingerückter Form darzustellen.
Beachten Sie, dass Tabulatoren und Leerzeichen sowohl als Leerraum behandelt werden, aber sie sind nicht gleich: die Linien " hello"und "\thello"sind keine gemeinsame führende Leerzeichen haben , in Betracht gezogen.
Zeilen, die nur Leerzeichen enthalten, werden in der Eingabe ignoriert und in der Ausgabe auf ein einzelnes Zeilenumbruchzeichen normalisiert.
Zum Beispiel:
def test():
s = '''\
hello
world
'''
print(repr(s))
print(repr(dedent(s)))
Für alle Beispiele
import textwrap
Beispiel 1
Also, statt dies als die meist upvoted Antwort Staaten (dies verliert den schönen, sauberer, Einzug):
cmd = '''line {0}
line {1}
line {2}'''.format(1,2,3)
print(cmd)
Tun Sie dies (und BEHALTEN Sie die schöne, saubere Einkerbung)!
cmd = textwrap.dedent('''\
line {0}
line {1}
line {2}''').format(1,2,3)
print(cmd)
Beispiel 2
Wenn Sie viele Argumente für die format()Funktion haben, können Sie diese bei Bedarf in mehrere Zeilen einfügen. Beachten Sie, dass die format()Argumente hier zwei Zeilen umfassen:
cmd = textwrap.dedent('''\
line {0}
line {1}
line {2}
line {3}
line {4}
line {5}
line {6}
line {7}
line {8}
line {9}
line {10}
line {11}
line {12}
line {13}
line {14}
line {15}
line {16}
line {17}
line {18}
line {19}''').format(
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
)
print(cmd)
Und wenn die format()Argumente wirklich lang sind, können Sie natürlich auch jedes Argument in eine eigene Zeile setzen:
cmd = textwrap.dedent('''\
line {0}
line {1}
line {2}
line {3}
line {4}
line {5}
line {6}
line {7}
line {8}
line {9}
line {10}
line {11}
line {12}
line {13}
line {14}
line {15}
line {16}
line {17}
line {18}
line {19}''').format(
100000000000000000000000000000000000000000000000000000000000000000001,
100000000000000000000000000000000000000000000000000000000000000000002,
100000000000000000000000000000000000000000000000000000000000000000003,
100000000000000000000000000000000000000000000000000000000000000000004,
100000000000000000000000000000000000000000000000000000000000000000005,
100000000000000000000000000000000000000000000000000000000000000000006,
100000000000000000000000000000000000000000000000000000000000000000007,
100000000000000000000000000000000000000000000000000000000000000000008,
100000000000000000000000000000000000000000000000000000000000000000009,
100000000000000000000000000000000000000000000000000000000000000000010,
100000000000000000000000000000000000000000000000000000000000000000011,
100000000000000000000000000000000000000000000000000000000000000000012,
100000000000000000000000000000000000000000000000000000000000000000013,
100000000000000000000000000000000000000000000000000000000000000000014,
100000000000000000000000000000000000000000000000000000000000000000015,
100000000000000000000000000000000000000000000000000000000000000000016,
100000000000000000000000000000000000000000000000000000000000000000017,
100000000000000000000000000000000000000000000000000000000000000000018,
100000000000000000000000000000000000000000000000000000000000000000019,
100000000000000000000000000000000000000000000000000000000000000000020,
)
print(cmd)
Beispiel 3
Und stattdessen , wie ich in meiner ursprünglichen Antwort angegeben habe (die gut aussehende Einrückungen beibehält, aber etwas mühsam zu verwenden ist):
print("\n\n" +
"########################\n" +
"PRINT DOCSTRING DEMO:\n" +
"########################")
... das kannst du jetzt machen! --womit meine mehrzeiligen Zeichenfolgen beim Drucken "am linken Rand des Displays ausgerichtet werden können, während sie im Quellcode in eingerückter Form angezeigt werden" (siehe offizielle Dokumentation ):
print(textwrap.dedent("""
########################
PRINT DOCSTRING DEMO:
########################\
"""))
Beispiel 4
Und stattdessen , das mittendrin einen hässlich aussehenden Mangel an Einrückung aufweist:
def printDocstrings1():
"""
Print all document strings for this module, then exit.
Params: NA
Returns: NA
"""
print("""
---------------------
Module Documentation:
---------------------
printDocstrings:{}
myFunc1:{}
class Math:{}
__init__:{}
add:{}
subtract:{}""".format(
printDocstrings1.__doc__,
myFunc1.__doc__,
Math.__doc__,
Math.__init__.__doc__,
Math.add.__doc__,
Math.subtract.__doc__))
... tun Sie dies , textwrap.dedent()um durchgehend gut aussehende Einrückungen zu erhalten!:
def printDocstrings2():
"""
Print all document strings for this module, then exit.
Params: NA
Returns: NA
"""
print(textwrap.dedent("""\
---------------------
Module Documentation:
---------------------
printDocstrings:{}
myFunc1:{}
class Math:{}
__init__:{}
add:{}
subtract:{}""").format(
printDocstrings2.__doc__,
myFunc1.__doc__,
Math.__doc__,
Math.__init__.__doc__,
Math.add.__doc__,
Math.subtract.__doc__))
Führen Sie den obigen Code aus
Sie können meinen Testcode oben in meinem eRCaGuy_hello_world GitHub-Repo hier ausführen : textwrap_practice_1.py .
Führen Sie den Befehl aus:
./textwrap_practice_1.py
ODER:
python3 textwrap_practice_1.py