RTF Datei schreiben

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
Schlori
User
Beiträge: 5
Registriert: Freitag 25. Mai 2018, 16:02

Hallo,
ich würde gerne in eine RTF-Datei schreiben.

Code: Alles auswählen

import os
file = "test.rtf"
with open (file, "w") as datei:
    datei.write("{\\rtf1 '{0}'}".format("hier soll der Text stehen"))    
os.startfile(file)
Ich bekomme die u.s. Fehlermeldung, die auch durchaus einleuchtend ist. Wie aber kann ich dies umgehen?

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python34\rtf_datei.py", line 4, in <module>
    datei.write("{\\rtf1 '{0}'}".format("hier soll der Text stehen"))
ValueError: unexpected '{' in field name
Danke schon mal im Voraus für Eure Hilfe
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da du Format-Strings benutzt, sind { und } besondere Zeichen. Wenn man die jetzt in der Ausgabe haben will, muss man sie "escapen" wie man so schoen denglischt. Aehnliches tut man zB mit \, der dazu benutzt wird, neue Zeilen, Tabulatoren etc einzufuegen - und wenn man \ will, muss man \\ schreiben.

Und das sollte auch hier die Loesung sein. Einfach {{ und }} fuer die geschweiften Klammern schreiben, die du behalten willst in der Ausgabe:

Code: Alles auswählen

>>> "{{ {} }}".format(10)
'{ 10 }'
Schlori
User
Beiträge: 5
Registriert: Freitag 25. Mai 2018, 16:02

Ja, das war auch mein erster Gedanke, aber es scheint hier nicht zu funktionieren :cry:
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Nutzt Du noch Python 2.6? Seit 2.7 geht das in der gezeigten Form.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ich vermute mal, er benutzt Python 3.4

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python34\rtf_datei.py", line 4, in <module>
    datei.write("{\\rtf1 '{0}'}".format("hier soll der Text stehen"))
ValueError: unexpected '{' in field name
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Schlori
User
Beiträge: 5
Registriert: Freitag 25. Mai 2018, 16:02

Code: Alles auswählen

import os
file = "test.rtf"
with open (file, "w") as datei:
    datei.write ("{\\rtf1 {{0}} }".format("hier soll der text stehen"))   
os.startfile(file)
... produziert den selben Fehler

P.S. Ich nutze Python 3.4
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Du hast ja auch die falschen Klammern gedoppelt. Vergleiche noch einmal mit den Beispiel von __deets__.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

ich vermute du möchtest die beiden äußeren {} in die Datei schreiben und anstelle von {0} soll "hier soll der text stehen" eingefügt werden.

Code: Alles auswählen

with open (file, "w") as datei:
	datei.write ("{{\\rtf1 {0} }}".format("hier soll der text stehen"))
mit f-Strings gehts auch so:

Code: Alles auswählen

text = "hier soll der text stehen"
with open (file, "w") as datei:
	datei.write (f"{{\\rtf1 {text} }}")
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Schlori
User
Beiträge: 5
Registriert: Freitag 25. Mai 2018, 16:02

kbr hat geschrieben: Freitag 25. Mai 2018, 18:28 Du hast ja auch die falschen Klammern gedoppelt. Vergleiche noch einmal mit den Beispiel von __deets__.
... und das heißt?
Wie würde mein Statement dann aussehen?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du dir mein Beispiel mal wirklich angeschaut? Sieht gerade überhaupt nicht danach aus.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Schlori hat geschrieben: Freitag 25. Mai 2018, 20:37 ... und das heißt?
Wie würde mein Statement dann aussehen?
Muss ich mich jetzt ärgern, Zeit für dich verschwendet zu haben?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Schlori
User
Beiträge: 5
Registriert: Freitag 25. Mai 2018, 16:02

Sorry, war völlig verblendet.
Danke für die Tipps
... war keine Zeitverschwendung :P
Antworten