81 Stimmen

Python, wie liest man Bytes aus einer Datei und speichert sie?

Ich möchte Bytes aus einer Datei lesen und dann diese Bytes in eine andere Datei schreiben und diese Datei speichern.

Wie kann ich das tun?

155voto

Jeremy Punkte 1

Hier sehen Sie, wie Sie das mit den grundlegenden Dateioperationen in Python machen. Dabei wird eine Datei geöffnet, die Daten werden in den Speicher eingelesen, dann wird die zweite Datei geöffnet und die Daten werden herausgeschrieben.

in_file = open("in-file", "rb") # opening for [r]eading as [b]inary
data = in_file.read() # if you only wanted to read 512 bytes, do .read(512)
in_file.close()

out_file = open("out-file", "wb") # open for [w]riting as [b]inary
out_file.write(data)
out_file.close()

Wir können dies knapper formulieren, indem wir die with Tastatur, um das Schließen der Datei zu steuern.

with open("in-file", "rb") as in_file, open("out-file", "wb") as out_file:
    out_file.write(in_file.read())

Wenn Sie nicht die gesamte Datei im Speicher ablegen wollen, können Sie sie in Teilen übertragen.

chunk_size = 4096 # 4 KiB

with open("in-file", "rb") as in_file, open("out-file", "wb") as out_file:
    while True:
        chunk = in_file.read(chunk_size)

        if chunk == b"":
            break # end of file

        out_file.write(chunk)

19voto

Mark Evans Punkte 492

In meinen Beispielen verwende ich das 'b'-Flag ('wb', 'rb') beim Öffnen der Dateien, weil Sie sagten, Sie wollten Bytes lesen. Das 'b'-Flag weist Python an, Zeilenendezeichen nicht zu interpretieren, die von Betriebssystem zu Betriebssystem unterschiedlich sein können. Wenn Sie Text lesen wollen, lassen Sie das 'b' weg und verwenden Sie 'w' bzw. 'r'.

Damit wird die gesamte Datei in einem Stück mit dem "einfachsten" Python-Code gelesen. Das Problem bei diesem Ansatz ist, dass Ihnen beim Lesen einer großen Datei der Speicher ausgehen könnte:

ifile = open(input_filename,'rb')
ofile = open(output_filename, 'wb')
ofile.write(ifile.read())
ofile.close()
ifile.close()

Dieses Beispiel wurde so verfeinert, dass es 1-MB-Blöcke liest, um sicherzustellen, dass es für Dateien jeder Größe funktioniert, ohne dass der Speicher knapp wird:

ifile = open(input_filename,'rb')
ofile = open(output_filename, 'wb')
data = ifile.read(1024*1024)
while data:
    ofile.write(data)
    data = ifile.read(1024*1024)
ofile.close()
ifile.close()

Dieses Beispiel ist dasselbe wie oben, nutzt aber die Verwendung von with zur Erstellung eines Kontexts. Der Vorteil dieses Ansatzes ist, dass die Datei beim Verlassen des Kontexts automatisch geschlossen wird:

with open(input_filename,'rb') as ifile:
    with open(output_filename, 'wb') as ofile:
        data = ifile.read(1024*1024)
        while data:
            ofile.write(data)
            data = ifile.read(1024*1024)

Siehe das Folgende:

7voto

carl Punkte 48262
with open("input", "rb") as input:
    with open("output", "wb") as output:
        while True:
            data = input.read(1024)
            if data == "":
                break
            output.write(data)

Die obige Funktion liest jeweils 1 Kilobyte und schreibt es. Sie können auf diese Weise unglaublich große Dateien unterstützen, da Sie nicht die gesamte Datei in den Speicher lesen müssen.

5voto

Ikke Punkte 95045

Verwenden Sie die öffnen Funktion, um die Datei zu öffnen. Die Funktion open gibt ein Dateiobjekt die Sie zum Lesen und Schreiben von Dateien verwenden können:

file_input = open('input.txt') #opens a file in reading mode
file_output = open('output.txt') #opens a file in writing mode

data = file_input.read(1024) #read 1024 bytes from the input file
file_output.write(data) #write the data to the output file

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X