python之~ 序列化与反序列化

sy1.proto文件

syntax = "proto2";
message stuff
{
required int32 stuff_ID = 1;
required string stuff_Name = 2;
optional int32 stuff_Num = 3;

}

利用编译器转化成sy1_pb2.py文件

# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: sy1.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='sy1.proto',
  package='',
  serialized_pb=_b('
	sy1.proto"@
x05stuffx12x10
x08stuff_IDx18x01 x02(x05x12x12

stuff_Namex18x02 x02(	x12x11
	stuff_Numx18x03 x01(x05')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)




_STUFF = _descriptor.Descriptor(
  name='stuff',
  full_name='stuff',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='stuff_ID', full_name='stuff.stuff_ID', index=0,
      number=1, type=5, cpp_type=1, label=2,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='stuff_Name', full_name='stuff.stuff_Name', index=1,
      number=2, type=9, cpp_type=9, label=2,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='stuff_Num', full_name='stuff.stuff_Num', index=2,
      number=3, type=5, cpp_type=1, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=13,
  serialized_end=77,
)

DESCRIPTOR.message_types_by_name['stuff'] = _STUFF

stuff = _reflection.GeneratedProtocolMessageType('stuff', (_message.Message,), dict(
  DESCRIPTOR = _STUFF,
  __module__ = 'sy1_pb2'
  # @@protoc_insertion_point(class_scope:stuff)
  ))
_sym_db.RegisterMessage(stuff)


# @@protoc_insertion_point(module_scope)

写文件.py

import sys
import sy1_pb2


stuff1 = sy1_pb2.stuff()

#stuff1.stuff_ID=1001
stuff1.stuff_ID=int(input("请输入商品编号:"))
#stuff1.stuff_Name='book'
stuff1.stuff_Name=input("请输入商品名称:")
#stuff1.stuff_Num=30
stuff1.stuff_Num=int(input("请输入库存:"))
#print(stuff)

#反序列化
#stuff_unserial =stuff1.ParseFromString()

#序列化
#stuff_serial = stuff1.SerializeToString()

print('-------------')

with open("sy1.txt",'wb')as f:
    f.write(stuff1.SerializeToString())
    print("添加成功!")

读文件.py

import sys
import sy1_pb2

stuff1 = sy1_pb2.stuff()

with open("sy1.txt",'rb')as f:
   stuff1.ParseFromString(f.read())


print(stuff1)
print("读取成功!")

怎么样,484很简单~

原文地址:https://www.cnblogs.com/pheobe/p/5761130.html