Dha*_*dar 0 python serialization pickle
我已经看到并编写了用于在Python中pickle对象的代码.但它们都创建了包含数据的物理文件.我希望我将数据写入内存并读取并腌制并传输.
它甚至可能吗?
from PIL import ImageGrab
import io
import codecs
import pickle
# Model class to send Process Data to the server
class ProcessData:
process_id = 0
project_id = 0
task_id = 0
start_time = 0
end_time = 0
user_id = 0
weekend_id = 0
# Model class to send image data to the server
class ProcessScreen:
process_id = 0
image_data = bytearray()
image_name = "Dharmindar_screen.jpg"
ImageGrab.grab().save(image_name,"JPEG")
image_data = None
with codecs.open(image_name,'rb') as image_file:
image_data = image_file.read()
serialized_process_data = io.BytesIO()
process_data = ProcessData()
process_data.process_id = 1
process_data.project_id = 2
process_data.task_id = 3
process_data.user_id = 4
process_data.weekend_id = 5
process_data.start_time = 676876
process_data.end_time = 787987
process_screen = ProcessScreen()
process_screen.process_id = process_data.process_id
process_screen.image_data = image_data
prepared_process_data = (process_data, process_screen)
process_data_serializer = pickle.Pickler()
process_data_serializer(serialized_process_data).dump(prepared_process_data)
print('Data serialized.')
if process_data_serializer is not None:
d = process_data_serializer.getvalue()
deserialized_data = None
with open(d, 'rb') as serialized_data_file:
process_deserializer = pickle.Unpickler(serialized_data_file)
deserialized_data = process_deserializer.load()
else:
print('Empty')
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出TypeError:Required参数'file'(pos 1)未找到
您传递给的File对象pickle.dump只需要一个write方法,请参阅https://docs.python.org/2/library/pickle.html#pickle.dump
file必须有一个接受单个字符串参数的write()方法.因此,它可以是为写入而打开的文件对象,StringIO对象或满足此接口的任何其他自定义对象.
例如,您甚至可以创建自己的类来存储pickle数据,而不是使用StringIO对象
class MyFile(object):
def __init__(self):
self.data = []
def write(self, stuff):
self.data.append(stuff)
Run Code Online (Sandbox Code Playgroud)
然后只是挑选一个这个类的实例:
class ExampleClass(object):
def __init__(self, x):
self.data = x
a = ExampleClass(123)
f = MyFile()
pickle.dump(a, f)
Run Code Online (Sandbox Code Playgroud)
另一种选择是,正如@rawing所提出的那样,使用pickle.dumps它会直接返回一个你可以使用的字符串,在这里进行比较.
| 归档时间: |
|
| 查看次数: |
2422 次 |
| 最近记录: |