私は、Pythonでオブジェクトをピクルするためのコードを見て、書きました。しかし、彼らはすべてデータを含む物理ファイルを作成します。私は、データをメモリに書き込んでそれを読んで、それをピクルスして転送したいと思います。物理ファイルではなく、メモリ内の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')
上記のコードは、例外TypeError:必要な引数 'ファイル'(POS 1)が見つからない
RAMに書き込むのですか?オブジェクトを他のPythonコードに送信したいのであれば、それを単にパラメータとして渡すことができます。何を達成しようとしていますか? – Shayn
私は単にSocketを通してサーバーにデータを送ろうと思っています。そのためには、私はオブジェクトをピクルする必要があります。しかし、私はすべてのコードを見てきましたが、最初にオブジェクトをバイト形式でファイルに書き込んでから、そのファイルから再度取得すると言います。私は物理的にファイルを書き込むのではなく、メモリでそれをやりたい。 – Dharmindar
バッファインスタンスを提供するStringIOオブジェクトを使用できますが、実際に何をしようとしているのかをShaynが言っているので、 –