Подтвердить что ты не робот

Python, как читать байты из файла и сохранять его?

Я хочу прочитать байты из файла, а затем записать эти байты в другой файл и сохранить этот файл.

Как это сделать?

4b9b3361

Ответ 1

Вот как это сделать с основными файловыми операциями в Python. Это открывает один файл, считывает данные в память, затем открывает второй файл и записывает его.

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()

Мы можем сделать это более лаконично, используя клавиатуру with, чтобы обрабатывать закрытие файла.

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

Если вы не хотите хранить весь файл в памяти, вы можете передать его в куски.

piece_size = 4096 # 4 KiB

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

        if piece == "":
            break # end of file

        out_file.write(piece)

Ответ 2

В моих примерах я использую флаг 'b' ('wb', 'rb') при открытии файлов, потому что вы сказали, что хотите читать байты. Флаг 'b' указывает Python не интерпретировать символы конца строки, которые могут различаться между операционными системами. Если вы читаете текст, опустите "b" и используйте "w" и "r" соответственно.

Это считывает весь файл в одном фрагменте, используя "самый простой" код Python. Проблема с этим подходом заключается в том, что вы можете исчерпать память при чтении большого файла:

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

Этот пример уточняется для чтения блоков 1 МБ, чтобы гарантировать, что он работает с файлами любого размера без исчерпания памяти:

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()

Этот пример такой же, как и выше, но использует с помощью для создания контекста. Преимущество такого подхода заключается в том, что файл автоматически закрывается при выходе из контекста:

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)

См. следующее:

Ответ 3

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

Вышеуказанное будет читать по 1 килобайт за раз и записать его. Таким образом, вы можете поддерживать невероятно большие файлы, так как вам не нужно будет читать весь файл в памяти.

Ответ 4

Используйте функцию open, чтобы открыть файл. Открытая функция возвращает файл-объект, который вы можете использовать для чтения и записи в файлы:

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