gpt4 book ai didi

file - Python 读取和写入二进制文件

转载 作者:行者123 更新时间:2023-12-04 20:09:19 25 4
gpt4 key购买 nike

以下是我重新措辞的问题

读取二进制文件的前 10 个字节(稍后操作) -

infile = open('infile.jpg', 'rb')
outfile = open('outfile.jpg', 'wb')
x = infile.read(10)
for i in x:
print(i, end=', ')
print(x)
outfile.write(bytes(x, "UTF-8"))

第一个打印语句给出 -
255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 

第二个打印语句给出 -
b'\xff\xd8\xff\xe0\x00\x10JFIF'

x 中值的十六进制解释。
outfile.write(bytes(x, "UTF-8"))

返回 -
TypeError: encoding or errors without a string argument

那么 x 一定不是普通字符串而是字节字符串,它仍然是可迭代的?

如果我想将 x 的内容原封不动地写入 outfile.jpg ,那么我去 -
outfile.write(x)

现在我尝试获取每个 x [i] 并对每个 x [i] 执行一些操作(如下所示为 1 的简单乘积),将值分配给 y 并将 y 写入 outfile.jpg 使其与 infile.jpg 相同。所以我尝试 -
infile = open('infile.jpg', 'rb')
outfile = open('outfile.jpg', 'wb')
x = infile.read(10)

yi = len(x)
y = [0 for i in range(yi)]

j = 0
for i in x:
y [j] = i*1
j += 1

for i in x:
print(i, end=', ')

print(x)

for i in y:
print(i, end=', ')

print(y)

print(repr(x))
print(repr(y))

outfile.write(y)

第一个打印语句(遍历 x)给出 -
255, 216, 255, 224, 0, 16, 74, 70, 73, 70,

第二个打印语句给出 -
b'\xff\xd8\xff\xe0\x00\x10JFIF'

第三个打印语句(遍历 y)给出 -
255, 216, 255, 224, 0, 16, 74, 70, 73, 70,

打印语句给出 -
[255, 216, 255, 224, 0, 16, 74, 70, 73, 70]

最后,按照 Tim 的建议,打印 repr(x) 和 repr(y) 分别给出 -
b'\xff\xd8\xff\xe0\x00\x10JFIF'
[255, 216, 255, 224, 0, 16, 74, 70, 73, 70]

并且文件写入语句给出了错误 -
TypeError: 'list' does not support the buffer interface

我需要的是 y 与 x 的类型相同,这样 outfile.write(x) = outfile.write(y)

我凝视着 python 的眼睛,但我仍然看不到它的灵魂。

最佳答案

它们根本不相同 - 它们只是在 str() 之后显示相同应用于它们(print() 隐式执行)。打印 repr()他们,你会看到差异。例子:

>>> x = b'ab'
>>> y = "b'ab'"
>>> print(x)
b'ab'
>>> print(y) # displays identically
b'ab'
>>> print(repr(x)) # but x is really a 2-byte bytes object
b'ab'
>>> print(repr(y)) # and y is really a 5-character string
"b'ab'"

混合字符串和字节对象是没有意义的(好吧,不是在没有显式编码的情况下 - 但你并没有试图在这里编码/解码任何东西,对吧?)。如果你正在处理二进制文件,那么你根本不应该使用字符串——你应该使用 bytesbytearray对象。

所以问题不在于你的写作方式:在那之前,逻辑从根本上是困惑的。

猜不到你想要什么。请编辑问题以显示您要完成的任务的完整、可执行示例。为此,我们不需要 JPG 文件 - 组成一些简短的、任意的二进制数据。喜欢:
dummy_jpg = b'\x01\x02\xff'

关于file - Python 读取和写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com