Объединить два двоичных файла в третий двоичный файл - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь объединить два двоичных файла с третьим двоичным файлом в Python. Мой код:

input1 = input2 = ""

input1 = open('input1.bin').read()
input2 = open('input2.bin').read()

input1 += input2 

with open('Output.bin', 'w') as fp:
    fp.write(input1)

Этот код не выдает никаких ошибок, но он не генерирует ожидаемый результат.

Например, если бы я написал пакетную команду для слияния файлов:

copy /b input1.bin+input2.bin Output.bin

Эта команда генерирует Output.bin размером 150 КБ, тогда как более ранняя команда python дает мне размер выходного файла как 151 КБ.

Я тоже пробовал это:

with open('Output.bin', 'wb') as fp:
    fp.write(input1)

т.е. писать в двоичном режиме, но это дало мне ошибку:

TypeError: a bytes-like object is required, not 'str'

Что может быть правильным процесс для этого?


Ссылка на это для более ранней ошибки: TypeError: требуется объект, подобный байтам, а не 'str' при записи в файл в Python3

Это решение не работает .


Использование Python 3,7

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Причина, по которой вы получили эту ошибку (TypeError: требуется объект, подобный байтам, а не 'str' при записи в файл в Python3), потому что:
Вы читаете файл в текстовом режиме (который режим по умолчанию), и поэтому input1 и input2 стали строками, и вы попытались записать их обратно в двоичном режиме (вам нужно, чтобы input1 был байтовым объектом). Один из способов сделать это - прочитать сам файл в двоичном режиме, как показано ниже.

# Try reading the file in binary mode and writing it back in binary 
# mode. By default it reads files in text mode  
input1 = open('input1.bin', 'rb').read()
input2 = open('input2.bin', 'rb').read()

input1 += input2 

with open('Output.bin', 'wb') as fp:
    fp.write(input1)
0 голосов
/ 27 мая 2020

Я считаю, что это должно открыть оба входных файла, прочитать их по частям и записать в один выходной файл:

from shutil import copyfileobj
from io import DEFAULT_BUFFER_SIZE

with open('input1.bin', 'rb') as input1, open('input2.bin', 'rb') as input2, open('output.bin', 'wb') as output:
    copyfileobj(input1, output, DEFAULT_BUFFER_SIZE)
    copyfileobj(input2, output, DEFAULT_BUFFER_SIZE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...