str对象不支持项目赋值(读取字节时)

时间:2016-12-21 15:27:01

标签: python iterator binaryfiles

我有两个二进制数据文件,我想替换第二个二进制数据文件的一部分内容 这是我到目前为止的示例代码

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 个答案:

答案 0 :(得分:0)

您打开文件并阅读它。所以,你在data2中有字符串。字符串不支持项目分配。

相反,你可以这样做:

data2 = data[2][:i] + next(bytes) + data[2][i + 1:]

答案 1 :(得分:0)

字符串无法在内部更改(即它们是不可变的)。试试这个:

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

您将收到错误消息。但是,这将有效。

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

您可能最好建立一个新字符串,然后将其切片到您的data2中。

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:]