Python "read binary" und "read"

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
py4fun
User
Beiträge: 16
Registriert: Donnerstag 3. Januar 2013, 20:07

Hallo,
ich habe einen kleinen FTP-Client geschrieben..
Es funktioniert auch alles gut. Ich hatte anfangs Probleme beim Dateien hochladen.
Dort habe ich Dateien zuerst eingelesen und habe das so gemacht:

Code: Alles auswählen

file_up = open (""Datei Pfad", "r")
Hierbei habe ich das ganze mit "r" eingelesen.
Dann hatte ich Probleme dabei "binary Dateien" hochzuladen, habe gegoogelt und herausgefunden, dass es man die Datei dazu mit "rb" einlesen muss.
Ich es dann so gemacht, dass alle Dateien mit "rb" eingelesen wurden auch Textbasierte Dateien.
Das ist mir dann erst nachher aufgefallen, dass man textbasierte Dateien eigentlich mit "r" einliest.
Wieso hat das ganze trotzdem geklappt?
Kann ich das in dem Programm so lassen, oder sollte ich eine eindeutige Unterscheidung zwischen textbaseirten Dateien und binary Dateien in das Programm einbauen?
P.s. Das gleiche "Problem" bzw. die gleiche Frage betrifft auch den Download, wobei ich die Dateien halt nicht einlese, sondern schreibe ("w" und "wb")

Ich hoffe ihr habt meine Frage verstanden.. :D
Ich würde mich über antworten freuen.
Gruß
BlackJack

@py4fun: Wenn Du die Dateien binär öffnest, dann werden die Daten exakt so gelesen wie sie in der Datei stehen. Das ist also das was Du in der Regel haben möchtest, wenn Du mit beliebigen Daten umgehen willst. Bei Textdateien kann je nach System zwischen der Datei und Deinem Programm etwas an den Daten verändert werden. Und das in beide Richtungen, also sowohl beim Lesen, als auch beim Schreiben.
py4fun
User
Beiträge: 16
Registriert: Donnerstag 3. Januar 2013, 20:07

@BlackJack
Erstmal vielen Dank, dass du so schnell geantwortet hast ;)
Hat mir geholfen.
Nur ich verstehe nicht, was du hiermit
BlackJack hat geschrieben: Bei Textdateien kann je nach System zwischen der Datei und Deinem Programm etwas an den Daten verändert werden. Und das in beide Richtungen, also sowohl beim Lesen, als auch beim Schreiben.
genau meinst, bzw. was das jetzt im Klartext heißt. Also wenn ich Textdateien binär schreibe oder lese kann je nach System etwas an den Datei Daten verändert werden?!
Auf jeden Fall schonmal vielen Dank
Gruß
BlackJack

@py4fun: Nein, umgekehrt: Wenn Du eine Datei im Textmodus öffnest, dann kann das System die Daten verändern, das heisst Du bekommst beim lesen nicht zwingend exakt das was als Bytes in der Datei steht und beim schreiben landen in der Datei nicht zwingend die Bytes die Du geschrieben hast. Hauptsächlich betrifft das Windows wo beim Schreiben und Lesen die Zeilenende-Zeichen verändert werden und beim Lesen zum Beispiel bei einem bestimmten Bytewert einfach aufgehört wird zu lesen, auch wenn danach noch Daten stehen. Das Verhalten geht noch auf das Betriebssystem CPM zurück, wo die Daten in Blöcken gespeichert wurden und man das Textende deshalb mit einem speziellen Bytewert markieren musste.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das erinnert mich an die guten alten Modem-Zeiten. Wenn man beim ftp vor dem get das bin vergessen hat und die Datei, die man mühsam über Stunden heruntergeladen hat, nur Schrott war.
py4fun
User
Beiträge: 16
Registriert: Donnerstag 3. Januar 2013, 20:07

Vielen, vielen Dank :)
grundlegend heisst das also, dass wenn ich die Dateien binär öffne, so bin ich auf der sicheren Seite? :D
schön, dass so schnell geantwortet wurde.
Gruss
Antworten