Объект str не поддерживает назначение элементов (при чтении байтов)

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

Binary_file1 = open("File1.yuv","rb")
Binary_file2 = open("File2.yuv","rb")

data1 = Binary_file1.read()
data2 = Binary_file2.read()

bytes = iter(data1)

for i in range(4, 10):
    data2[i] = next(bytes)  

Он терпит неудачу в той части, где я приравниваю data2[i] к next(в байтах), и выдает ошибку, в которой говорится, что "объект str не поддерживает присвоение элемента". Часть, которую я не понимаю, состоит в том, как это является строковым объектом и Как я могу решить эту ошибку, Любая помощь будет оценена. Пожалуйста, обратите внимание, что двоичные файлы здесь огромны, и я хотел бы избежать создания дубликатов файлов, так как я всегда сталкиваюсь с проблемами памяти

2 ответа

Строки не могут быть изменены на месте (т.е. они неизменны). Попробуй это:

a = 'abcde'
a[2] = 'F'

Вы получите ошибку. Но это будет работать.

a = a.replace(a[2], 'F')

Возможно, вам лучше создать новую строку, а затем нарезать ее на свои данные2.

newstring = ''
for i in range(4, 10):
    newstring += next(bytes)

data2 = data2.replace(data2[4:10], newstring)

Конечно, проблема здесь в том, что data2[4:10] может быть не уникальным в data2, и в этом случае у вас будет несколько замен. Итак, следующее может быть даже лучше:

data2 = data2[:4] + newstring + data[10:]

Вы открыли файл и прочитали его. Итак, у вас есть строка в data2, Строки не поддерживают назначение элементов.

Вместо этого вы можете сделать:

data2 = data[2][:i] + next(bytes) + data[2][i + 1:]
Другие вопросы по тегам