Seite 1 von 3

Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 09:19
von Kalli87
Morgen Forum,
eine recht einfache Aufgabe eine Datei auslesen nur bekomme ich eine dicke Fehlermeldung wenn ich mir den Inhalt der Datei mit print anzeigen will.
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib64/python3.2/tkinter/__init__.py", line 1399, in __call__
return self.func(*args)
File "/home/gast/Arbeitsfläche/Projekte/Datenbank/menue.py", line 62, in bildarchiv
import Bildarchiv
File "/home/gast/Arbeitsfläche/Projekte/Datenbank/Bildarchiv.py", line 321, in <module>
app = Application(root)
File "/home/gast/Arbeitsfläche/Projekte/Datenbank/Bildarchiv.py", line 20, in __init__
self.datei_einlesen()
File "/home/gast/Arbeitsfläche/Projekte/Datenbank/Bildarchiv.py", line 33, in datei_einlesen
print(config.read())
File "/usr/lib64/python3.2/codecs.py", line 300, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 784: invalid start byte
Also das einlesen is das geringste Problem eher den Inhalt mal anzeigen zu lassen dass is das Problem und ich wüsste gern wo da das Problem liegt.

Code: Alles auswählen

def datei_einlesen(self):
      config = open("/home/gast/Arbeitsfläche/Projekte/dicomserver.txt", "r")
      print(config.read())

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 09:33
von BlackJack
@Kalli87: Das einlesen ist nicht das geringste Problem sondern das *ist* hier das Problem. Zum `print()` kommt es gar nicht erst. Du öffnest die Datei im Textmodus ohne explizit eine Kodierung anzugeben. Python 3 versucht's dann mit der ”Systemkodierung”, in diesem Fall UTF-8, und das funktioniert mit den Daten in der Datei nicht, weil die offensichtlich nicht UTF-8 kodiert sind. Gib beim `open()` den passenden `encoding`-Parameter an, dann klappt das auch mit dem Einlesen.

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 09:35
von Hyperion
Und wie immer hier ein Verweis auf meine Signatur! :mrgreen:

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 09:47
von Kalli87
BlackJack hat geschrieben:@Kalli87: Das einlesen ist nicht das geringste Problem sondern das *ist* hier das Problem. Zum `print()` kommt es gar nicht erst. Du öffnest die Datei im Textmodus ohne explizit eine Kodierung anzugeben. Python 3 versucht's dann mit der ”Systemkodierung”, in diesem Fall UTF-8, und das funktioniert mit den Daten in der Datei nicht, weil die offensichtlich nicht UTF-8 kodiert sind. Gib beim `open()` den passenden `encoding`-Parameter an, dann klappt das auch mit dem Einlesen.
Bitte was? Warum is das jetzt so kompliziert? :shock:
Ich versteh jetzt gerade nix mehr, normal sag ich immer "open" dann die datei und "r" für lesen. BlackJack was meinst du denn bitte mit "explizite Kodierung"?
Hyperion hat geschrieben:Und wie immer hier ein Verweis auf meine Signatur! :mrgreen:
Das hilft mir erst recht nicht weiter ;)

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 09:52
von Hyperion
Kalli87 hat geschrieben:
Hyperion hat geschrieben:Und wie immer hier ein Verweis auf meine Signatur! :mrgreen:
Das hilft mir erst recht nicht weiter ;)
Und das kannst Du sofort beurteilen? :twisted:

Mal im Ernst: Aus den verlinkten Dokumenten kannst Du lernen, was es mit dem ganzen "Encoding, Unicode und String-Krams" auf sich hat. Und das solltest Du wissen, denn ansonsten läufst Du immer wieder in diese Probleme!

In Deinem konreketen Fall kann man nicht viel mehr sagen, als dass Du folgendes tun musst:

Code: Alles auswählen

with open("{name}", "r", encoding="{encoding_name}") as f:
    # usw.
Der Parameter ``encoding`` der ``open``-Funktion wäre jetzt nicht so schwer zu finden gewesen: Link zur Doku.

Du musst halt das spezielle Encoding *wissen* und entsprechend *angeben*. Genau das hat BlackJack Dir gesagt...

(Nur ohne Verständnis, was das alles soll, bringt es natürlich wenig!)

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 10:00
von Kalli87
Mich irritiert das ganze nur das ist alles! In meinen Büchern und auf den Internetseiten die ich durchstöbert habe war nie die rede von "Encoding" selbst hier im Forum war keine rede davon. (Auf den Beiträgen wo Google mich hingeführt hat) Deswegen bin ich jetzt so überrascht was ich alles angeben muss zusätzlich um nur eine Datei zu lesen.......

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 10:05
von Sirius3
@Kalli87: Encoding ist hier im Forum immer wieder ein Thema. Wenn einem aber das passende Stichwort fehlt, ist eine Suche schwierig, das merke ich selbst immer wieder. Aber jetzt hast Du ja das Stichwort, und die Links in Hyperions Signatur sind wirklich gut, um einen Einstieg in diese Thematik zu finden.

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 10:28
von Hyperion
@Kalli87: Genau das Thema war damals ursächlich, dass ich mich hier im Forum angemeldet habe ;-) (iirc bin ich dann gleich mit Leonidas und / oder BlackJack aneinander geraten :mrgreen: )

So, mal Archäologie betrieben... Hach ja... Gott war ich damals naiv und renitent... *in Erinnrung schwelg* :mrgreen:

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 11:40
von Kalli87
Ganz ehrlich? Ich dreh langsam am Rad wegen diesem encoding kram..... Was muss denn dort hin? utf-8 geht ja nicht..... Ich versteh es nicht

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 11:40
von snafu
@Kalli87: Das Thema Encoding taucht möglicherweise deshalb nicht in deinen Büchern auf, weil Python 3.x intern häufig das passende Encoding verwendet. In deinem Fall passt es aber offenbar nicht. Demnach musst du dich um die Dekodierung leider selbst kümmern.

Was man grundsätzlich wissen sollte: Der Inhalt einer Datei besteht aus Bytes. Also Zeichen, die mit maximal 8 Bit dargestellt werden können. Ein Zeichen in dem von Python 3.x dargestellten String muss aber nicht zwangsläufig genau einem Byte entsprechen. Es kann auch sein, dass mehrere Bytes für ein einzelnes Zeichen verwendet werden müssen. Um jetzt zu definieren, welcher Mechanismus zum Umwandeln zwischen Bytes und "normalem" Text verwendet wurde, gibt man dies als Encoding an. Das "utf-8", welches in deiner Fehlermeldung auftaucht, ist ein Beispiel für ein solches Encoding.

Du musst nun also herausfinden, mit welchem Encoding der Text zuvor in "Byteform" gebracht und in die Datei geschrieben wurde. Ansonsten weiß Python nicht, wie es die Bytes wieder in einen für Menschen lesbaren Text bringen soll. Das heißt: Entweder du erfährst es direkt aus der Quelle (also z.B. aus dem Programmcode, der zum Schreiben verwendet wurde) - das wäre der Idealfall. Andernfalls gibt es noch Tools, welche die Kodierung erraten können und damit auch häufig richtig liegen. Du könntest dann das erratene Encoding angeben und hoffen, dass es damit funktioniert.

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 11:45
von Kalli87
Ach du sch........ eibenkleister............

Danke snafu

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 11:53
von Kalli87
Also laut meinem Chef hier Praktikum wurde die Datei mit de@euro geschrieben. Bringt euch das weiter?

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 12:01
von snafu
Kalli87 hat geschrieben:Also laut meinem Chef hier Praktikum wurde die Datei mit de@euro geschrieben.
Dann gib mal "iso-8859-15" als Encoding an. Das wird meistens für deutschsprachigen Text verwendet und kennt auch das Euro-Zeichen.

Also in der Art:

Code: Alles auswählen

import codecs

with codecs.open(dateiname, 'r', 'iso-8859-15') as infile:
    content = infile.read()

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 12:06
von Kalli87
snafu hat geschrieben:
Kalli87 hat geschrieben:Also laut meinem Chef hier Praktikum wurde die Datei mit de@euro geschrieben.
Dann gib mal "iso-8859-15" als Encoding an. Das wird meistens für deutschsprachigen Text verwendet und kennt auch das Euro-Zeichen.

Also in der Art:
import codecs

with codecs.open(dateiname, 'r', 'iso-8859-1') as infile:
content = infile.read()
danke danke danke danke..................................... snafu, du warst meine Rettung ;)

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 12:22
von Hyperion
@Kalli87: Ich hoffe Dir ist jetzt zumindest klar geworden, dass Du Dich mit dem Thema auseinander setzen solltest! Denn nicht immer kann man auf Rettung von außen hoffen ;-)

Und um das noch einmal klar zu stellen: Das ist *kein* Python Problem, sondern ein *allgemein gültiges*! Wer programmiert sollte ein Basiswissen darüber haben.

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Mittwoch 25. März 2015, 12:38
von Kalli87
Wurde heute das erste mal damit konfrontiert und hatte früher nie solche Probleme.
Aber ich werde mich belesen, Danke :)

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Donnerstag 26. März 2015, 09:05
von Kalli87
Mal eine bescheidene Frage zur Formatierung meiner Ausgabe:

Ich hab meine Datei nun ausgelesen, das was ich brauch heraus gefiltert und mit append in eine liste gespeichert.
Wenn ich das ganze jetzt aber verwenden möchte hab ich zwischen jeden einzelnen Buchstaben oder Zahl ein Leerzeichen.
Kann man das irgendwie entfernen? Mit replace hab ich es bereits probiert aber das funktioniert leider nicht.

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Donnerstag 26. März 2015, 09:09
von Hyperion
``replace`` sollte aber "funktionieren"! Vermutlich verwirfst Du den Rückgabewert?

Zeig uns doch mal den Aufbau der Datei, Deine Listendaten und wie Du es versucht hast!

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Donnerstag 26. März 2015, 09:20
von Kalli87
Wenn ich das euch zeige steinigt ihr mich virtuell ^^

Code: Alles auswählen

f = open("/home/gast/Arbeitsfläche/Projekte/dicomserver.txt", "r", encoding="iso-8859-15")
        for nummer, zeile in enumerate(f):
            export_name.append(zeile)
name = []
        for dsatz in export_name[95]:
            name.append(dsatz)
        self.test = []
        self.test.append(name[22])
        self.test.append(name[23])
        self.test.append(name[24])
        self.test.append(name[25])
Das is aber noch in der Testphase aber so konnte ich genau die Zeile verwenden die ich brauche und danach hab ich die Zeile noch zerlegt und die das raus gefiltert was ich brauche.

Ich seh schon die virtuellen Steine fliegen :wink:


ps. hier der Versuch mit dem replace

Code: Alles auswählen

self.test= self.test.replace(" ", "")
AttributeError: 'list' object has no attribute 'replace'
Ganz normal Leerzeichen gegen "nichts" ersetzen.

Re: Probleme bei Datei auslesen bzw. Inhalt anzeigen

Verfasst: Donnerstag 26. März 2015, 09:24
von Sirius3
@Kalli87: hast Du Dir angeschaut, mit welchen Objekten Du hier arbeitest?
Was für einen Typ hat "name" und was steht drin?
Was für ein Typ ist "self.text" und was steht drin?
Wo hast Du Leerzeichen, und wo stören Dich die Leerzeichen?
Was macht Zeile 95 so besonders?