在Python中,您可以将StringIO用于字符数据的类文件缓冲区。 内存映射文件基本上对二进制数据做类似的事情,但它需要一个用作基础的文件。 Python是否有一个用于二进制数据的文件对象,并且只是内存,相当于Java的ByteArrayOutputStream

我的用例是我想在内存中创建一个ZIP文件, ZipFile需要一个类似文件的对象。

===============>>#1 票数:79 已采纳

您可能正在寻找io.BytesIO课程。 它的工作方式与StringIO完全相同,只是它支持二进制数据:

from io import BytesIO
bio = BytesIO(b"some initial binary data: \x00\x01")

StringIO将抛出TypeError:

from io import StringIO
sio = StringIO(b"some initial binary data: \x00\x01")

===============>>#2 票数:24

只要您不尝试将任何unicode数据放入StringIO并且小心不使用cStringIO应该没问题。

根据StringIO文档,只要你保持unicode或8位,一切都按预期工作。 据推测,当有人做一个f.write(u"asdf")时, StringIO做一些特别的f.write(u"asdf")我所知,ZipFile没有这样做)。 无论如何;

import zipfile
import StringIO

s = StringIO.StringIO()
z = zipfile.ZipFile(s, "w")
z.write("test.txt")
z.close()
f = file("x.zip", "w")
f.write(s.getvalue())
s.close()
f.close()

按预期工作,生成的存档中的文件与原始文件之间没有区别。

如果您知道这种方法不起作用的特定情况,我最感兴趣的是听到它:)

===============>>#3 票数:3

查看struct包: https//docs.python.org/library/struct.html ,它允许您将字符串解释为压缩二进制数据。

不确定这是否完全回答你的问题,但你可以使用struct.unpack()将二进制数据转换为python对象。


import struct
f = open(filename, "rb")
s = f.read(8)
x, y = struct.unpack(">hl", s)

在这个例子中,“>”告诉读取big-endian,“h”读取2字节短,“l”表示4字节长。 您可以明显地将这些更改为您需要从二进制数据中读取的任何内容...

  ask by jelovirt translate from so

未解决问题?本站智能推荐:

2回复

在python中将二进制缓冲区写入文件

我有一些python代码: 从压缩的数据库中获取BLOB。 在C中调用解压缩数据的非压缩例程。 将未压缩的数据写入文件。 它使用ctypes来调用C例程,该例程位于共享库中。 这主要是有效的,除了实际写入文件。 为了解压缩,我将未压缩的数据放入pytho
1回复

在Python中读取二进制文件时的缓冲区大小与文件大小

我正在学习在python中读取/写入二进制文件的基础知识,并且了解此代码。 感谢您对理解此代码的任何帮助。 谢谢! 问题1:50000的缓冲区大小是否等于50kb? (in.jpg约为150kb) Q2:如何从输入文件中读取下一个数据增量(即下一个50,000字节的数据
1回复

遍历python中的IOString缓冲区

我在python中有一个IOString缓冲区,我想要的是对其进行迭代,并且对于每次迭代读取一定数量的字节,例如,第一次迭代从0到65536,第二次迭代65537到131072并继续……我不知道如何做到这一点,我正在使用方法read但是只读取了我传递的位置的一个字节。 有任何想法吗?
1回复

python中的缓冲区意味着什么

在struct的python文档中,使用了单词buffer而没有解释: http://docs.python.org/library/struct.html struct.unpack_from(fmt, buffer[,offset=0]) 根据给定的格式解压缩缓冲区。
1回复

在C ++中管理二进制数据的缓冲区

我正在尝试创建一种简单的二进制格式以通过Arduino上的BlueToothLE模块进行传输。 我正在尝试描述对象列表的属性。 对于初学者,我正在尝试仅传递一个属性。 我尝试编码和传递的格式如下。 所以给了一个名字“鲍勃” 但是当我传递缓冲区时,它似乎发生了变化。
3回复

Python编写二进制文件,字节

Python 3.我正在使用QT的文件对话框小部件来保存从互联网下载的PDF。 我一直在使用'open'读取文件,并尝试使用文件对话框小部件来编写它。 但是,我一直遇到“TypeError:'_ io.BufferedReader'不支持缓冲区接口”错误。 示例代码: 当不使用
1回复

蟒蛇:击败或减少从设备读取时的输入缓冲区

(在raspberry硬件上的raspbian上为python 2.7.9)从串行端口读取GPS数据,我发现没有办法击败输入缓冲。 这使我的数据变得模糊不清,并且之间的时间间隔过长。 我搜索了这个站点以及其他站点,并在open语句中应用了各种形式的“缓冲”(buffering = 0,buf
1回复

Python中的二进制I / O

我正在尝试在Python中对文件进行二进制读写。 我正在尝试自学一些编程(因为我使用互联网,所以它并不是在自学,但是无论如何……)。 我的问题是,在Python中以二进制格式读取文件实际上不会将这些位输出给我,但似乎已经将其处理为文本。 例: 我的系统在与脚本相同的文件夹中有一个
6回复

在python中简单编辑二进制文件

这应该很容易! 但我一直无法找到这个问题的答案。 使用python,我想将二进制文件读入内存,修改文件的前四个字节,然后将文件写回。 必须有一种简单的方法来编辑四个小字节! 对?
2回复

在二进制文件中写入整数到python文件

如何在Python 3中将整数写入二进制文件? 例如,我想将6277101735386680763835789423176059013767194773182842284081写入二进制文件,正好是24个字节(无符号,我只使用正整数)。 我怎样才能做到这一点? 我尝试了以下方法: