Объект 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:]