textfile.read() in Unicode statt ansi?

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
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

Sonntag 12. März 2006, 13:22

Hallo Leuts,

ich habe versucht, eine Textdatei auzulesen und eine in einer schöneren
Form zu erstellen (ICQ-Verlaufsdatei zum Anzeigen, was man gesagt hat)

Normalerweise ist dies ja kein Problem mit:

Code: Alles auswählen

f=file(r"C:\datei.txt", "a+")
print f.read()
Jedoch kann ICQ die Dateien (.txt) nur im Unicode-Format speichern statt dem
üblichen Ansi-Format (bei "Speichern unter" zu sehen) abspeichern.

Dies ist nicht nur doppelt so groß, sondern gibt mir als jedes zweite
Zeichen eines dieser unschönen Kästchen aus "".
Damit lässt sich aber der Text sehr schwer bearbeiten, deshalb frage ich
euch, ob mir dabei jemand helfen kann, da ich ja nicht vor start des Progs
immer auffordern kann, dass man die Datei nochmal neu speichert; diesmal
im Ansi...

Ich hoffe ihr könnt mir dabei helfen.
Liebe Grüße
Hannes

PS: Ich habe nach einem expliziten Beispiel gesucht, aber entweder nichts gefunden,
oder es übersehen - sorry.
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Sonntag 12. März 2006, 13:35

Moin!

Ein schönes Tutorial zum Umgang mit Unicode ( oder eben auch nicht ) hat Gerold mal hier gepostet :

http://www.python-forum.de/viewtopic.php?t=5095

Gruss,
Gunnar
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

Sonntag 12. März 2006, 13:44

Danke schön für die Mühe, aber dieses tut habe ich auch schon gefunden...
Leider hat es mir nicht geholfen, meinen Text leserlich aus der Unicode-*.txt
auszulesen... :cry:

Könntest du mir also bitte den Code - wie du es dir vorstellst - gleich mal mitposten?

Danke im Voraus
Hannes

PS: geg: Textdatei mit Inhalt; abgespeichert im Format Unicode
ges: eine Art, es mit .read() oder anders auszulesen, dass nicht jedes 2.
Zeichen ein Viereck ist...
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Sonntag 12. März 2006, 14:33

Code: Alles auswählen

import sys
import codecs

# Encoding der Standardausgabe herausfinden
stdout_encoding = sys.stdout.encoding or sys.getfilesystemencoding()

# Datei lesen
f = codecs.open("testdokument.txt", "rU", "utf_16")
s_unicode = f.read()
f.close()

# In die Konsole schreiben
print s_unicode.encode(stdout_encoding)
Dieses Beispiel ist aus dem Tutorial ( etwas beschnitten ). Ich habe mit Openoffice diverse Textdokumente erstellt und diese dann mit dem script eingelsen und ausgespuckt. Manchmal musste ich etwas nach dem richtigen Codec suchen ( Im Beispiel oben lese ich das Openoffice "Unicode" mit "utf16" ein ). Diese findest du in den python-docs wenn du nach "codecs" suchst. Um die "Klötzchen" auszublenden lese ich die Datei mit dem Modus "rU" ein ( universal newline mode oder so ), weil Unix und Windows unterschiedliche Arten haben die newlines zu markieren.

Wenn du noch Fragen hast nur zu. Ich bin zwar auch nicht ganz so fit in diesen Dingen, aber für so etwas reicht es doch noch ;)

Gruss,
Gunnar
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

Sonntag 12. März 2006, 15:40

Geniale hilfe...
nur ist jetzt jede zweite zeile mit einer Leerzeile versehen, aber ich denke
mal nicht, dass dies so schwierig zu ändern sein sollte.. :wink:

Tausend Dank, klappt wirklich genial
hannes
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Sonntag 12. März 2006, 15:58

Hast du mal versucht verschiedene Codecs auszuprobieren ? Wer weiss was die Entwickler von ICQ mit Unicode meinen ? UTF-7, UTF-8 usw.
Hier im script den Namen des codecs "CODECNAME" einfügen :

Code: Alles auswählen

f = codecs.open("testdokument.txt", "rU", "CODECNAME")
Hier ist die Seite der Doku :
http://docs.python.org/lib/standard-encodings.html
Evtl. gibt es ja auch einen Weg das Coding einer Datei mit einem Pythonscript festzustellen. Wenn nicht, kann man ja mal sowas schreiben ;)

Ich hoffe du kommst damit weiter...

Gruss,
Gunnar

P.S.
Kein Problem, dass du fragst mir wurde hier auch viel geholfen.
:wink:
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 12. März 2006, 16:05


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Sonntag 12. März 2006, 16:27

:mrgreen:
Antworten