Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将任何对象转换为字节数组并将其保留在内存中?_Python_Arrays_Byte_Data Conversion - Fatal编程技术网

Python 如何将任何对象转换为字节数组并将其保留在内存中?

Python 如何将任何对象转换为字节数组并将其保留在内存中?,python,arrays,byte,data-conversion,Python,Arrays,Byte,Data Conversion,我正在尝试为Python中的任何对象到字节数组构建一个简单的转换器。我看了一下pickle,但它只能创建一个文件,这不是我需要的。我还检查了json.dump,但有些对象需要一个序列化程序来转储 我需要一个转换器,它可以将我的对象保存在内存中,并可以将任何对象转换为字节数组。Pickler的file参数只需要有一个writeb方法来接收字节。原则上,您可以使用方法writeself编写自己的类,b使用这些比特执行任何操作,并将该类的对象传递给Pickler 例如: import pickle

我正在尝试为Python中的任何对象到字节数组构建一个简单的转换器。我看了一下pickle,但它只能创建一个文件,这不是我需要的。我还检查了json.dump,但有些对象需要一个序列化程序来转储

我需要一个转换器,它可以将我的对象保存在内存中,并可以将任何对象转换为字节数组。

Pickler的file参数只需要有一个writeb方法来接收字节。原则上,您可以使用方法writeself编写自己的类,b使用这些比特执行任何操作,并将该类的对象传递给Pickler

例如:

import pickle

class File:
  def write(self,b):
    print(b)

f = File()
p = pickle.Pickler(f)

object = 3.14
p.dump(object)
输出:b'\x80\x03G@\t\x1e\xb8Q\xeb\x85\x1f'

不必像本例中那样打印字节,您可以将它们附加到列表中,或任何您想要的内容。

Pickler的file参数只需要有一个writeb方法来接收字节。原则上,您可以使用方法writeself编写自己的类,b使用这些比特执行任何操作,并将该类的对象传递给Pickler

例如:

import pickle

class File:
  def write(self,b):
    print(b)

f = File()
p = pickle.Pickler(f)

object = 3.14
p.dump(object)
输出:b'\x80\x03G@\t\x1e\xb8Q\xeb\x85\x1f'


不必像本例中那样打印字节,您可以将它们附加到列表中,或者附加到任何您想要的内容中。

我将此添加为实际答案,因为它似乎可以满足您的需要。使用pickle.dump是一个问题,因为它的设计目的是获取序列化对象并将其写入文件,尽管正如其他答案中所指出的,它不一定非得这样做,但这与问题无关

要使用的函数是,它直接以字节数组的形式返回序列化对象:

someobject=123 字节=pickle.dumpssomeobject
我将此添加为实际答案,因为它似乎满足了您的需求。使用pickle.dump是一个问题,因为它的设计目的是获取序列化对象并将其写入文件,尽管正如其他答案中所指出的,它不一定非得这样做,但这与问题无关

要使用的函数是,它直接以字节数组的形式返回序列化对象:

someobject=123 字节=pickle.dumpssomeobject
你看过这个函数了吗?是的,看起来bytearray只把字符串转换成bytearray。你有没有一个例子,我可以将任何类型的对象转换为byte array@Abion47?任意类型,不问任何问题?不,我认为如果没有认真的反思工作,这是不可能的,即使这样,也可能会带来更多的麻烦。如果你想序列化一个类型,特别是自定义类型,你通常必须定义如何序列化它,例如,通过遵循,这样你就可以用bytearray对它进行序列化。但是,说到pickle,你为什么认为它只能通过将它写入文件来工作?您是否尝试过dumps函数?@R.Karlus您可以使用pickle.dumps,但为什么需要将其转换为字节?目的是什么?您看过函数了吗?是的,看起来bytearray只将字符串转换为bytearray。你有没有一个例子,我可以将任何类型的对象转换为byte array@Abion47?任意类型,不问任何问题?不,我认为如果没有认真的反思工作,这是不可能的,即使这样,也可能会带来更多的麻烦。如果你想序列化一个类型,特别是自定义类型,你通常必须定义如何序列化它,例如,通过遵循,这样你就可以用bytearray对它进行序列化。但是,说到pickle,你为什么认为它只能通过将它写入文件来工作?您是否尝试过dumps函数?@R.Karlus您可以使用pickle.dumps,但为什么需要将其转换为字节?目的是什么?这是一个很大的工作,使转储工作时,你可以只使用转储。我解决了问题,使用酸洗转储方法。但这是我对帮助的支持。@Abion47这不是“使转储工作”,而是表明它在使用时不必是文件。传递值的两种形式,作为返回值或回调,都有其各自的情况,其中一种形式比另一种更可取。当然,您可以将dump用于非文件对象的对象。但是您必须定义一个自定义类,该类依附于一个特定接口,该接口定义一个函数,该函数将字节作为参数接收。或您可以跳过所有这些,直接使用转储获取字节。你的答案是一个有趣的factoid,但我想不出在什么情况下,它实际上是OP的一个有用的替代解决方案。@Abion47应该有很多在线帖子,当使用回调而不是返回值更方便时,你可以从中学习。这是一个。我能想到一些:序列化不适合内存,你想用它做点什么,比如将它与另一个进行比较。当你可以只使用转储时,要使转储工作起来需要做很多工作。我使用pickle dumps方法解决了这个问题。但这是我对帮助的支持票。@Abion47这不是“让人倾倒”
“工作”,但要表明它在使用时不必是文件。传递值的两种形式,作为返回值或回调,都有其各自的情况,其中一种形式比另一种更可取。当然,您可以将dump用于非文件对象的对象。但是您必须定义一个自定义类,该类依附于一个特定接口,该接口定义一个函数,该函数将字节作为参数接收。或您可以跳过所有这些,直接使用转储获取字节。你的答案是一个有趣的factoid,但我想不出在什么情况下,它实际上是OP的一个有用的替代解决方案。@Abion47应该有很多在线帖子,当使用回调而不是返回值更方便时,你可以从中学习。这是一个。我能想到一些:序列化不适合内存,你想用它做点什么,比如把它和另一个进行比较。太棒了!好极了投票通过了,太棒了!好极了投票通过。