Mehrzeilige Zeichenfolgenliterale in Python (Mehrzeilige Zeichenfolgenliterale in Python), Lektion, Seite 723948
https://www.purl.org/stefan_ram/pub/len_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Mehrzeilige Zeichenfolgenliterale in Python 

Mit »'''« beginnende Zeichenfolgenliterale

Ein Zeichenfolgenliteral darf auch mit »'''« beginnen. Es muß dann auch mit »'''« enden.

Solch ein Zeichenfolgenliteral darf dann Zeilenenden enthalten, also mehrere Zeilen umfassen. Es darf auch ein einfaches Apostroph »'« oder eine Folge zweier Apostrophe »''« enthalten. Genauso darf es beliebig viele Anführungszeichen »"« enthalten.

Konsoleninteraktion
print( '''Alpha'
Gamma''Epsilon
Zeta''' )
Alpha'
Gamma''Epsilon
Zeta

Ohne »'''« könnte dieselbe Zeichenfolge aber auch als »"Alpha'\nGamma''Epsilon\nZeta"« geschrieben werden, wie »repr« zeigt.

Protokoll
print( repr( '''Alpha'
Gamma''Epsilon
Zeta''' ))
"Alpha'\nGamma''Epsilon\nZeta"
print( "Alpha'\nGamma''Epsilon\nZeta" )
Alpha'
Gamma''Epsilon
Zeta
Ein weiteres Beispiel
'''
FINISHED FILES ARE THE RESULT OF
YEARS OF SCIENTIFIC STUDY COMBINED
WITH THE EXPERIENCE OF MANY YEARS.
'''.count( 'F' )

Mit »"""« beginnende Zeichenfolgenliterale

Ein Zeichenfolgenliteral darf auch mit »"""« beginnen. Es muß dann auch mit »"""« enden.

Solch ein Zeichenfolgenliteral darf dann Zeilenenden enthalten, also mehrere Zeilen umfassen. Es darf auch ein einfaches Anführungszeichen »"« oder eine Folge zweier Anführungszeichen »""« enthalten. Genauso darf es beliebig viele Apostrophe »'« enthalten.

Konsoleninteraktion
print( """Alpha"
Gamma""Epsilon
Zeta""" )
Alpha"
Gamma""Epsilon
Zeta

Zum Kopieren fremder Texte (zum Beispiel von Webseiten) sollte immer »r« (wie in »r'''…« oder »r"""…«) verwendet werden!

Zeichenfolgen mit mehr als zwei aufeinanderfolgenden Anführungszeichen oder Apostrophen ⃗

Zeichenfolgen mit vielen aufeinanderfolgenden Apostrophen »'« können in einfachen Anführungszeichen geschrieben werden.

Konsoleninteraktion
print( "'''''''''" )
'''''''''

Zeichenfolgen mit vielen aufeinanderfolgenden Anführungszeichen »'« können in einfachen Apostrophen geschrieben werden.

Konsoleninteraktion
print( '"""""""""' )
"""""""""

Zeichenfolgen mit vielen aufeinanderfolgenden Apostrophen »'« und  Anführungszeichen »"« können durch Zeichenfolgenverbindungen geschrieben werden. Dabei können Teilfolgen, die keine Anführungszeichen enthalten, in Anführungszeichen eingeschlossen werden und Teilfolgen, die keine Apostrophe enthalten, in Apostrophe eingeschlossen werden.

Konsoleninteraktion
print( "'''''''''" + '""""""""' )
'''''''''""""""""

Zeichenfolgenliterale werden ja auch ohne Pluszeichen verbunden, so daß auch die folgenden Schreibweise möglich ist.

Konsoleninteraktion
print( "'''''''''"'""""""""' )
'''''''''""""""""

Solche Ausdrücke sind schwer zu lesen, kommen aber in der Praxis auch nur selten vor.

Übungsfragen ⃗

?   Übungsfrage

Im folgenden Beispiel kann man drei Textzeilen sehen, die jeweils durch ein Zeilenende getrennt sind. Leider sind sie im Quelltext nicht übersichtlich zu erkennen, da zwei von ihnen in derselben Zeile wie die Begrenzer (Apostrophe) stehen.

Anweisung
a = '''Anton
Berta
Cäsar'''

Im folgenden Beispiel kann man drei Textzeilen sehen, die übersichtlich frei von den begrenzenden Apostrophen sind. Jedoch befindet sich nun vor der ersten und hinter der letzten Zeile jeweils ein unerwünschtes Zeilenendzeichen. Was muß an das Ende der Anweisung noch angefügt werden, um zu erreichen, daß der Name »a« an die Zeichenfolge des Zeichenliterals ohne diese beiden Zeilenendzeichen gebunden wird?

Anweisung
a = '''
Anton
Berta
Cäsar
'''

Übungsaufgaben °

/   Zeilentrennungen reparieren °

Die folgende komprimierte Quelle »quelle« enthält einen Text, der wie ein Gedicht in Versen (Zeilen) geschrieben wurde, deren Ende jeweils mit einem Schrägstrich »/« gekennzeichnet wurde. Gleichzeitig enthält er aber auch willkürliche Zeilenenden (beispielsweise hinter »Laß,«), die im Originaltext nicht enthalten sind.

Verwenden Sie Python, um aus der komprimierten Quelle wieder den Orginaltext zu machen.

Quelle
quelle='''
Schaff, das Tagwerk meiner Hände,/Hohes Glück, daß ich's vollende!/Laß,
o laß mich nicht ermatten!/Nein, es sind nicht leere Träume:/Jetzt nur
Stangen, diese Bäume/Geben einst noch Frucht und Schatten.
'''[ 1: -1 ]
gewünschtes Ergebnis (Originaltext „Hoffnung“ von Goethe)
Schaff, das Tagwerk meiner Hände,
Hohes Glück, daß ich's vollende!
Laß, o laß mich nicht ermatten!
Nein, es sind nicht leere Träume:
Jetzt nur Stangen, diese Bäume
Geben einst noch Frucht und Schatten.

/   „srt“ °

Das Dateiformat „srt“ (en.wikipedia.org/wiki/SubRip) für Untertitel zu einem Video besteht aus Blöcken, die eine laufende Nummer, eine Zeitangabe, einen Text und eine Leerzeile enthalten. Zur Vereinfachung nehmen wir hier an, daß der Text stets nur eine Zeile umfaßt, so daß jeder Block stets insgesamt vier Zeilen umfaßt.

Wie findet man srt-Dateien mit Google ?

Drücken Sie die Textzeilen aus! (Das heißt: Es soll ein Ausdruck geschrieben werden, dessen Wert eine Zeichenfolge ist, die nur aus den Textzeilen besteht. Statt dessen darf zu diesem Zweck aber auch eine Abfolge mehrerer Anweisungen geschrieben werden, deren letzte dann das die Textzeilen ausgibtc.)

Ein Text im Format »srt«
beispiel_srt = '''
1
00:00:01,000 --> 00:00:02,000
Dieser Text

2
00:00:02,000 --> 00:00:03,000
ist nur ein Beispiel,

3
00:00:03,000 --> 00:00:05,000
das extra fuer diesen Kurs

4
00:00:03,000 --> 00:00:05,000
erstellt wurde.

'''
Die gewünschte Zeichenfolge
Dieser Text
ist nur ein Beispiel,
das extra fuer diesen Kurs
erstellt wurde.

/   „srt“ 2 °

Tatsächlich erlaubt das srt-Format auch mehrzeilige Textblöcke in einer srt-Datei. Können Sie auch unter diesen erschwerten Bedinungen eine Lösung zur Extraktion des Textes finden?

Ein Text im Format »srt«
beispiel_srt = '''
1
00:00:01,000 --> 00:00:02,000
Dieser Text

2
00:00:02,000 --> 00:00:03,000
ist nur ein Beispiel,
das extra fuer diesen Kurs

3
00:00:03,000 --> 00:00:05,000
erstellt wurde.

'''
Die gewünschte Zeichenfolge
Dieser Text
ist nur ein Beispiel,
das extra fuer diesen Kurs
erstellt wurde.

/   mbox °

Nachrichten werden oft im mbox-Format gesammelt (de.wikipedia.org/wiki/Mbox, tools.ietf.org/html/rfc4155, qmail.org./man/man5/mbox.html). Dabei werden die einzelnen Nachrichten oft durch eine Leerzeile getrennt, der das Wort »From« und ein Leerzeichen folgt.

Schreiben Sie eine Folge von Anweisungen, an deren Ende ein solche Nachrichtensammlung ausgegeben wird, die nur die Nachrichten von »Mueller« enthält.

Eine Nachrichtensammlung im mbox-Format
mbox = '''
From tmp Tue Sep 19 13:56:36 2006
From: Mueller
Subject: Laub

Bitte sammeln Sie das
Laub wieder ein!

From tmp Wed Sep 20 20:56:36 2006
From: Gembora
Subject: Lennartz

Noch keine Neuigkeiten von Lennartz.

From tmp Wed Sep 20 21:56:36 2006
From: Schulte
Subject: Termin

Leider muss unser Termin verschoben werden.
Bitte rufen Sie mich an!

From tmp Fri Sep 22 21:56:36 2006
From: Mueller
Subject: Besichtigung

Das Bauamt plant die Begehung jetzt für KW41.
Bosch hat sich noch nicht entschieden.

From tmp Sat Sep 23 11:56:36 2006
From: Kastner
Subject: Re: Verpackung

Der Concierge-Service wird die Sachen wie von
Ihnen gewuenscht verpacken und zustellen.
'''
Das gewünschte Ergebnis
From tmp  Tue Sep 19 13:56:36 2006
From: Mueller
Subject: Laub

Bitte sammeln Sie das
Laub wieder ein!

From tmp Fri Sep 22 21:56:36 2006
From: Mueller
Subject: Besichtigung

Das Bauamt plant die Begehung jetzt für KW41.
Bosch hat sich noch nicht entschieden.

/   Übungsaufgabe °

Schreiben Sie einen Ausdruck für eine Liste (der Typ muß nicht unbedingt ›list‹ sein!), die jede Sprache aus der Liste ›q‹ nur noch genau einmal enthält.

Zusatzaufgabe Die Liste soll alphabetisch sortiert sein.

Das genaue Format, in dem die Liste erscheint (einzeilig/mehrzeilig, Abgrenzung der einzelnen Einträge u.s.w.) ist hierbei egal !

Quelle

q='''

Russisch

English

English

English

Französisch

Englisch

Hochchinesisch

Englisch

Englisch

Griechisch

Englisch

Japanisch

Englisch

Arabisch

Englisch

Italienisch

Englisch

Latein

Englisch

Russisch

Englisch

Französisch

Englisch

Deutsch

Englisch

Hebräisch

Englisch

Japanisch

Englisch

Spanisch

Englisch

Italienisch

Englisch

Russisch

Englisch

Portugiesisch

Englisch

Französisch

Englisch

Türkisch

Englisch

Polnisch

Englisch

Japanisch

Englisch

Berlinisch

Englisch

Italienisch

Englisch

Holländisch

'''

/   Übungsaufgabe °

Schreiben Sie einen Ausdruck für eine Auflistung (der Typ muß nicht unbedingt ›list‹ sein!), die jede Sprache aus der Liste ›q‹ genau einmal enthält und zwar zusammen mit der Häufigkeit  ihres Vorkommens in jener Liste.

Zusatzaufgabe Statt der absoluten Häufigkeit soll die prozentuale Häufigkeit  erscheinen.

Das genaue Format, in dem die Auflistung erscheint (einzeilig/mehrzeilig, Abgrenzung der einzelnen Einträge u.s.w.) ist hierbei egal !

  

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723948 stefan_ram:723948 Mehrzeilige Zeichenfolgenliterale in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723948, slrprddef723948, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/len_python