tripple Quotes Frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kalysto
User
Beiträge: 117
Registriert: Freitag 14. April 2017, 15:28

Hallo zusammen,

Ich habe eine Frage zu den

Code: Alles auswählen

""" oder '''
und zwar versuche ich nun eine Variable zu erstellen welche diesen Inhalt hat:

Code: Alles auswählen

        template = (
            """\
            irgend was
            zum schauen
            
            
            
            so wie das hier....\
            """
        )
wenn ich das nun in eine Datei Schreibe werden immer die Leerzeichen mit verwendet:

Code: Alles auswählen

            irgend was
wie kann ich das umgehen finde hier zu nichts... oder muss man das komplett anders angehen ?

weil das hier möchte ich nicht da es bescheiden aussieht:

Code: Alles auswählen

        template = (
            """\
irgend was
zum schauen



so wie das hier....\
"""
        )
Danke schon einmal für die Unterstützung!

EDIT:

Habe eine Lösung gefunden:

Code: Alles auswählen

textwrap.dedent(xyz)
wäre dies so zu verwenden okay ?
Benutzeravatar
sparrow
User
Beiträge: 4198
Registriert: Freitag 17. April 2009, 10:28

Deine Backslash sind nicht escaped.

Ich löse das in der Regel so:

Code: Alles auswählen

template = "\\nirgend was\nzum schauen\n\n\n\nso wie das hier....\"


template = (
    "\\\n"irgend was\n"
    "zum schauen\n\n\n\n"
    "so wie das hier....\\"
)
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kalysto: Wenn überhaupt grössere mehrzeilige Zeichenketten, würde ich die am Anfang als Konstanten definieren. Dann kann man das so schreiben:

Code: Alles auswählen

TEMPLATE = """\
irgend was
zum schauen



so wie das hier....
"""
Eingerückt im Code mehr als eine Zeile, aber nicht zu viel, schreibe ich in der Regel als mehrere Zeichenketten die nur durch „whitespace“ getrennt sind:

Code: Alles auswählen

        template = (
            "irgend was\n"
            "zum schauen\n"
            "\n"
            "\n"
            "\n"
            "so wie das hier....\n"
        )
Das wird vom Compiler zu einer Zeichenkette zusammenfasst, verbraucht also zur Laufzeit keine Rechenzeit. Und man könnte auch alle Zeilen mit führenden Leerzeichen anfangen lassen, was bei `textwrap.detent()` nicht geht.

@sparrow: Zumindest der erste Backslash soll nicht escaped werden, der ist dazu da, damit die erste Zeile des Textes auf einer eigenen Zeile stehen kann und somit im Quelltext im Bezug auf die anderen Zeilen an der ”richtigen” Stelle. Vergleiche:

Code: Alles auswählen

text = """eins
zwei
drei
"""

# vs.

text = """\
eins
zwei
drei
"""
In der ersten Variante ist es einfach(er) das "eins" zu übersehen.

Ob der letzte Backslash im Original das Zeilenendezeichen bei der letzten Zeile verhindern sollte weiss ich nicht. Das habe ich weggelassen weil Zeilen ohne Zeilenendezeichen doof sind und früher oder später Ärger machen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Kalysto
User
Beiträge: 117
Registriert: Freitag 14. April 2017, 15:28

Hallo zusammen,

Ja, der letzte backslash war bewusst gewählt da daran nichts weiter bearbeitet wird und eine Fertige Datei ist.

zu: `textwrap.detent()`
Da ich eig. am Anfang keine führenden Leerzeichen benötige würde ich dies nun verwenden hatte damit eig. bisher keine Probleme.
Benutzeravatar
__blackjack__
User
Beiträge: 13122
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kalysto: Das ist ein Trugschluss. Ein Zeilenendezeichen gehört an das Ende *jeder* Zeile. Es gibt zig Werkzeuge die das dort erwarten und die Murks machen wenn das da nicht ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten