Lesen eine ganze binäre Datei in Python

Muss ich import binäre Datei von Python -- die Inhalte sind signed 16-bit Integer big endian.

Den folgenden Stack-Überlauf Fragen schlagen, wie Sie ziehen in mehrere bytes zu einer Zeit, aber ist dies der Weg, um scale-up zu Lesen, in eine ganze Datei?

Dachte ich, so eine Funktion zu erstellen wie:

from numpy import *
import os

def readmyfile(filename, bytes=2, endian='>h'):
    totalBytes = os.path.getsize(filename)
    values = empty(totalBytes/bytes)
    with open(filename, 'rb') as f:
        for i in range(len(values)):
            values[i] = struct.unpack(endian, f.read(bytes))[0]
    return values

filecontents = readmyfile('filename')

Aber das ist ziemlich langsam (die Datei ist 165924350 bytes). Gibt es einen besseren Weg?

  • Ich denke, es ist langsam, weil der bytes=2.
  • Lesen eine 150mb-Datei ist, wird langsam sein. Was erwarten Sie? Wie langsam ist es?
  • Es ist tatsächlich nur etwa 3,5 Minuten (je nach unix -time), aber Lesen kann ich es in R in weniger als einer minute mit readBin
  • (und ich habe Tausende von diesen Dateien...)
  • Sind die Daten eindeutig Binär-oder das ASCII-Darstellung 16-bit-zahlen?
  • ASCII-Repräsentationen, denke ich...
  • In UNIX, Typ head [filename] Wenn Sie Lesen können, die umbers, müssen Sie ASCII-oder andere text-vs "binary".
  • Ja-das ist, was ich getan hatte und ich konnte sehen, wie die x\215l... also ich würd davon ausgegangen, es war die ASCII-Darstellung? Das etwas ändert?

InformationsquelleAutor hatmatrix | 2010-12-12
Schreibe einen Kommentar