Seite 1 von 1

Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 09:29
von campino97
Hallo,
Ich wollte mit Python diese Datei öffnen:
http://www.dateiupload.com/files/96AtOAzONS.txt
leider liest python wenn ich ganz normal

Code: Alles auswählen

datei = open("datei.txt","r")
daten=datei.read()
print daten
eingebe nur diesen kleinen Teil:
;QI^)^3OG&8F.R9%\E1KE'!/C


Wieso liest Python nicht die ganze Datei?

Schonmal Danke!

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 09:31
von deets
Du erwaehnst es nicht, aber ich vermute mal du bist mit Windows unterwegs? Dann musst du die Datei im *Binaer*-Modus oeffnen. Also "rb" statt nur "r".

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 09:41
von campino97
DANKE!
Es funktioniert!

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 09:42
von jerch
Hinzu kommt, dass Du mit print die Bytes direkt ans Terminal schickst und diese dort mitunter als Steuerzeichen interpretiert werden (von keine Ausgabe über Piepen führt das bis zu lustigem Cursorspringen und Zeilenlöschen). Verwende statt dessen repr().

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 11:53
von Hyperion
Und auch hier sollte das Plädoyer für das Öffnen von Dateien mittels `with` nicht fehlen:

Code: Alles auswählen

with open(...) as f:
    # f ist hier das file-Objekt und wird autoamtisch geschlossen;
    # f.close() ist also obsolet

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 13:03
von campino97
@jerch: Das verstehe ich nicht :K
Wieso können die bytes evtl. vom terminal als Steuersignal interpretiert werden?
und repr() gib mir doch einen string von dem objekt zurück.
Was hat das mit print zu tun?
thx.
@Hyperion: das nächste mal werde ich with benutzen

Danke für die Antworten.

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 13:08
von Hyperion
campino97 hat geschrieben: Wieso können die bytes evtl. vom terminal als Steuersignal interpretiert werden?
und repr() gib mir doch einen string von dem objekt zurück.
Was hat das mit print zu tun?
Weil ein Terminal bestimmte Byte-Werte dazu verwendet, "Dinge" zu tun, wie etwa einen Zeilenumbruch einzuschieben, einen Beep-Ton auszugeben, usw.

`repr` gibt Dir nur wirklich *druckbare* Zeichen zurück! Steuerzeichen werden ggf. mit Escape-Seuqenzen "ausgeschaltet"

Code: Alles auswählen

In [3]: print(repr("Hallo\nWelt"))
'Hallo\nWelt'

In [4]: print("Hallo\nWelt")
Hallo
Welt
campino97 hat geschrieben: @Hyperion: das nächste mal werde ich with benutzen
Was spricht dagegen, den bestehenden Code darauf umzustellen? ;-)

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 13:19
von campino97
Achso!
Jetzt versteh ich wozu man repr() braucht.

Danke

Re: Python liest die Datei nicht ganz

Verfasst: Freitag 22. Juni 2012, 13:53
von BlackJack
@campino97: Neues Thema wäre eigentlich besser. Ob man die Information für das System portabel heraus bekommen kann weiss ich nicht aus dem Kopf, aber Du kannst recht einfach ermitteln wie das mit dem laufenden Python-Interpreter aussieht:

Code: Alles auswählen

In [147]: sys.maxint
Out[147]: 2147483647
Das ist also von einem 32-Bit-Python. Das könnte aber durchaus so auch auf einem 64-Bit-System laufen.