Anzahl der Werte in einer binären Datei bestimmen

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
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Und Hallo mal wieder, :-)

mal gucken wann die ersten von Euch Heute schlafen gehen. :-)

Also ich benötige die Anzahl der Elemente in einer binären Datei.

Bis jetzt hatte ich das so gelöst:

Code: Alles auswählen

   def gettimescale(self,starttime, endtime):
        f_peaks = file('../../../peakdetektor1.hex','rb')
        a_p = numpy.fromfile(f_peaks,dtype='b',count=-1)
        nitems = 0#Anzahl aller Samples
        nitems = len(a_p)
        if nitems is not 0:
            #Zeitabstand von einem Sample zum naechsten
            timescale = float(endtime - starttime)/float(nitems)
        else:
            timescale = float(endtime - starttime)
        return timescale, nitems
Die Schleife dauert aber einige Sekunden. Ein Wert hat 8Bit.
Somit müßte man doch die Anzahl der Werte schneller bestimmen
können ?
Nur wie ?

In meiner Test Datei habe ich '511876' Werte. Dies ist aber eine
sehr kleine Datei '511876' Bytes ??!! He :idea:

Wo speichert der seine Informationen wie Dateinamen u.s.w. ?

Grüße Markus
Zuletzt geändert von feldmaus am Mittwoch 20. Mai 2009, 11:46, insgesamt 1-mal geändert.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Ich hatte mir die Antwort kurzer Hand selber gegeben:

Code: Alles auswählen

file_size = os.path.getsize(filename)
BlackJack

@feldmann_markus: Der Beitrag macht irgendwie hinten und vorne keinen Sinn. Die Anzahl der Elemente bekommst Du doch ganz einfach mit ``len(a_p)`` heraus!?

Welche Schleife dauert einige Sekunden? In dem Quelltext sehe ich keine Schleife.

Wo speichert *wer* seine Informationen?

Wenn Du's ohne Einlesen wissen willst: Dateigrösse durch Anzahl der Bytes teilen, die ein Element braucht.

Das ``is not 0`` ist übrigens eine sehr schlechte Idee, weil nicht garantiert ist, dass es die 0 nur einmal gibt. Und Zeile 4 ist ziemlich sinnlos weil gleich in der nächsten Zeile ein neuer Wert an den Namen `nitems` gebunden wird.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

BlackJack hat geschrieben:@feldmann_markus: Der Beitrag macht irgendwie hinten und vorne keinen Sinn. Die Anzahl der Elemente bekommst Du doch ganz einfach mit ``len(a_p)`` heraus!?
Hmm ja Du hast recht.
Ich wollte das len(a_p) vermeiden, da meine binären Dateien(6 Stück)
locker über ein GByte haben können(jede Datei).
Ich denke dann verstehst Du auch warum ich das mit len(a_p) nicht
machen wollte.
BlackJack hat geschrieben:Welche Schleife dauert einige Sekunden? In dem Quelltext sehe ich keine Schleife.
Ich dachte dabei an den internen Prozess, wenn das array mit Werten
gefüllt wird.
BlackJack hat geschrieben:Wo speichert *wer* seine Informationen?
Wenn ich mir unter Linux die Datei Größe anschaue, dann scheint das
nicht von dem Dateinamen abhängig zu sein. Zumindest kann ich
den Dateinamen ändern und die Dateigröße bleibt die gleiche.
Daher wollte ich wissen, wo der Dateiname gespeichert wird ?
Bzw. was alles zur Bestimmung der Dateigröße heran gezogen wird ?
BlackJack hat geschrieben:Wenn Du's ohne Einlesen wissen willst: Dateigrösse durch Anzahl der Bytes teilen, die ein Element braucht.
Genau das dachte ich mir schon. Danke.
BlackJack hat geschrieben:Das ``is not 0`` ist übrigens eine sehr schlechte Idee, weil nicht garantiert ist, dass es die 0 nur einmal gibt. Und Zeile 4 ist ziemlich sinnlos weil gleich in der nächsten Zeile ein neuer Wert an den Namen `nitems` gebunden wird.
Für den Fall das was schief läuft wollte ich nitems mit 0 initialisieren.

Vielen Dank für deine Antworten Grüße Markus
BlackJack

Natürlich hängt die Dateigrösse nicht vom Namen ab, sondern nur vom Inhalt. Und nur der wird zur Bestimmung der Grösse herangezogen.

Was sollte denn bei `len()` schieflaufen, ausser dass das Argument kein `__len__()` unterstützt, aber dann wird eine Ausnahme ausgelöst und die Funktion sowieso abgebrochen!?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

feldmann_markus hat geschrieben:Wenn ich mir unter Linux die Datei Größe anschaue, dann scheint das
nicht von dem Dateinamen abhängig zu sein. Zumindest kann ich
den Dateinamen ändern und die Dateigröße bleibt die gleiche.
Daher wollte ich wissen, wo der Dateiname gespeichert wird ?
Bzw. was alles zur Bestimmung der Dateigröße heran gezogen wird ?
Naja, die Metadaten jedenfalls nicht, das waere ja ein ziemliches Armutszeugnis fuer ein Dateisystem. Zu den Metadaten gehoert ja nicht nur der Dateiname, sondern auch der Inhaber, die Gruppe, die Rechte, die letzte Zugriffs-/Aenderungszeit, etc.

Wie genau das gespeichert wird, haengt vom Dateisystem ab.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten