Seite 1 von 1

RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 16:10
von Schlori
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

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 16:13
von __deets__
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 }'

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 16:48
von Schlori
Ja, das war auch mein erster Gedanke, aber es scheint hier nicht zu funktionieren :cry:

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 17:02
von kbr
Nutzt Du noch Python 2.6? Seit 2.7 geht das in der gezeigten Form.

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 17:07
von ThomasL
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

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 17:12
von Schlori

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

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 18:28
von kbr
Du hast ja auch die falschen Klammern gedoppelt. Vergleiche noch einmal mit den Beispiel von __deets__.

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 18:31
von ThomasL
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} }}")

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 20:37
von Schlori
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?

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 20:38
von __deets__
Hast du dir mein Beispiel mal wirklich angeschaut? Sieht gerade überhaupt nicht danach aus.

Re: RTF Datei schreiben

Verfasst: Freitag 25. Mai 2018, 20:45
von ThomasL
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?

Re: RTF Datei schreiben

Verfasst: Samstag 26. Mai 2018, 06:46
von Schlori
Sorry, war völlig verblendet.
Danke für die Tipps
... war keine Zeitverschwendung :P