Seite 1 von 1
Wie eine Datei in eine Liste laden?
Verfasst: Donnerstag 11. November 2010, 14:57
von funkheld
Hmmm.., ich möchte die Datei in eine Liste, es ist eine Binärdatei.
Wie geht das?
Code: Alles auswählen
laenge=os.path.getsize("cpc.bin")
f=open("cpc.bin", "rb")
wie in eine Liste??? = f.read(laenge)
Danke.
Gruss
Re: Wie eine Datei in eine Liste laden?
Verfasst: Donnerstag 11. November 2010, 15:03
von Hyperion
funkheld hat geschrieben:Code: Alles auswählen
laenge=os.path.getsize("cpc.bin")
f=open("cpc.bin", "rb")
wie in eine Liste??? = f.read(laenge)
Danke.
Gruss
Preisfrage für 50 Punkte: Wie lautete doch gleich das Idiom für das Öffnen von dateien?
@Frage (die man üblicherweise durchaus auch noch mal explizit im Thread selber ausschreiben darf, anstatt sich auf dem Titel auszuruhen...):
Lass Dir doch mal den Typen von f.read() ausgeben! Dann überlegst Du Dir, ob der Typ für die gewünschte Operation genügt.
Ansonsten schaust Du Dir mal die list() Funktion an und guckst, was die als Parameter erwartet.
Re: Wie eine Datei in eine Liste laden?
Verfasst: Donnerstag 11. November 2010, 15:11
von funkheld
"s = f.read(laenge)"
Ist "s" kein String???
Gruss
Re: Wie eine Datei in eine Liste laden?
Verfasst: Donnerstag 11. November 2010, 15:14
von EyDu
funkheld hat geschrieben:"s = f.read(laenge)"
Ist "s" kein String???
Gruss
Das kann man ganz prima mit der type-Funktion herausfinden.
Edit: Das Abfragen der Dateilänge ist übrigens noch immer überflüssig.
Re: Wie eine Datei in eine Liste laden?
Verfasst: Donnerstag 11. November 2010, 15:17
von /me
funkheld hat geschrieben:"s = f.read(laenge)"
Ist "s" kein String???
s ist bei deinem Beispiel in der Tat ein Stringobjekt. Was hat das jetzt mit deiner Frage nach der Liste zu tun?
Wie fügst du denn sonst Objekte einer Liste hinzu?
Re: Wie eine Datei in eine Liste laden?
Verfasst: Donnerstag 11. November 2010, 16:09
von jerch
ein bisschen offtopic:
Das Bestimmen der Dateigröße vor dem Einlesen des Inhaltes ist nicht nur überflüssig, sondern sogar gefährlich, zumindest so wie Du es dann weiter benutzt. Was, wenn ein Prozess zwischen Grössenbestimmung der Datei (2kB) und Auslesen diese öffnet und auf 1kB eindampft? Später erzeugst Du ein char-Array hieraus und greift auf den Inhalt über Index zu. Während Du von 2kB ausgehst, ist das char-Array nur 1kB groß. ---> Pufferüberlauf
Wie wärs damit?
Code: Alles auswählen
with open('bla', 'rb') as f:
s = f.read() # ohne Groesse, liesst komplette Datei ein
size = len(s) # ja, Strings haben eine Laenge
print s[0] # und Indexzugriff, der evtl. fuer Deine Zwecke reicht
s_in_c = ctypes.create_string_buffer(s, size) # nicht explizit nullterminiert
s_in_c = ctypes.create_string_buffer(s) # nullterminiert, Pufferueberlauf droht fuer falsche Groesse
's_in_c' und 'size' kannst Du nun Deinen DLL-Funktionen übergeben und hast Zugriff auf den kompletten Inhalt ohne falsche Puffergröße. Du kannst natürlich trotzdem 'read()' eine zu lesende Größe übergeben. Wichtig ist die anschliessende Überprüfung der Stringgröße, da 'read()' auch weniger zurückgeben kann.
<rant>
Das sind absolute Basics, die auch in anderen Programmiersprachen zu beachten sind. Ich komme hier ins Zweifeln, was Deine Programmierervergangenheit angeht.

</rant>
@Listenproblem:
Siehe Python-Dokumentation zum Erstellen einer Liste.
Re: Wie eine Datei in eine Liste laden?
Verfasst: Donnerstag 11. November 2010, 16:25
von EyDu
jerch hat geschrieben:Das Bestimmen der Dateigröße vor dem Einlesen des Inhaltes ist nicht nur überflüssig, sondern sogar gefährlich, zumindest so wie Du es dann weiter benutzt.
Das habe ich ihm auch schon mal erklärt...