在python中将元组的元组转换为字节

在python中将元组的元组转换为字节,python,sockets,type-conversion,blender,Python,Sockets,Type Conversion,Blender,我正在用upbge制作一个视频游戏(这方面基本上是python),但要在套接字之间发送信息,它需要以字节为单位,但我只找到了一种方法,将其转换为字符串(因为列表get是用游戏创建的(我有一个脚本,一旦新实体出现,它就会以(玩家实体|数据)但我希望数据在实体之间变化,我没有用于将其拆分为列表的符号,因此我尝试将数据作为列表发送,以便能够简单地检查其组件,但由于它是列表中的列表(有时甚至更多),bytearray将无法工作(至少我不知道如何使其工作) 我不确定如何总结代码,但这是我现在必须生成该信息

我正在用upbge制作一个视频游戏(这方面基本上是python),但要在套接字之间发送信息,它需要以字节为单位,但我只找到了一种方法,将其转换为字符串(因为列表get是用游戏创建的(我有一个脚本,一旦新实体出现,它就会以(玩家实体|数据)但我希望数据在实体之间变化,我没有用于将其拆分为列表的符号,因此我尝试将数据作为列表发送,以便能够简单地检查其组件,但由于它是列表中的列表(有时甚至更多),bytearray将无法工作(至少我不知道如何使其工作)

我不确定如何总结代码,但这是我现在必须生成该信息的代码

import socket

mi_socket = socket.socket()
mi_socket.bind(('127.0.0.1',55555))
mi_socket.listen()

TP = 0 #Total players
AP = 0 #Actual player
PL = ["host"] #Player List
AE = 0 #Actual entity
TE = 0 #Total entities
EL = ["|PlayerEntity$[Data]|"] #Entity list

PI = [] #Player Intel (Player name, Total Players, Player Code) (apartado uno en las comunicaciones)
order = None #Variable reservada para guardar comandos u identificaciones (ej: nombre de la entidad) en las comunicaciones
content = None #Variable reservada para almacenar la información recibida

incoming = 0 #Variable reservada para analizar el mensaje recibido de entrada

def login():
    global AP
    global TP
    global PL
    PJ = str(incoming).split("$")[1] #incoming Player
    if AP <= TP:
        if PJ!=str(PL[int(AP)]): #Nombre jugador que se conecta
            AP+=1
            login()
            pass
        else:
            identity()
        pass
    if AP > TP:
        PL.append(str("Player" + str(AP))) #Agregar jugador a la lista
        TP = int(AP)

def identity(): #identifica de qué se trata la orden para responder en consecuencia, si se trata de entidad anota tmb la entidad en la lista
    global TE
    global AE
    global EL
    global AP
    global PL
    PJ = str(incoming).split("$")[1]  # incoming Player
    PE = str(incoming).split("$")[2]  # incoming entity
    if AE <= TE:
        # Si nombre de jugador|nombre de objeto no és EL[AE]([1]|[2])
        if str(str(PL[AP])+"-"+str(PE)) != str(str(EL[AE]).split("|")[1]).split("$")[0]:
            AE+=1
            identity()
            pass
        else:
            EL[AE] = "|"+PL[AP]+"-"+PE+"$"+str(incoming).split("$")[3]+"|"
    if AE > TE:
        EL.append("|"+PL[AP]+"-"+PE+"$"+str(incoming).split("$")[3]+"|")
        TE = int(AE)

def main():
    global AP
    global AE
    global TE
    global  incoming
    conexion, ip = mi_socket.accept()
    incoming = conexion.recv(1024)
    login()
    conexion.send(str("#"+str(PL[AP])+"#"+str(EL[1:TE+1])+"#").encode())
    AP=0
    AE=0
    conexion.close()

while True:
    main()
导入套接字
mi_socket=socket.socket()
mi_套接字绑定('127.0.0.1',55555))
mi_socket.listen()
TP=0#玩家总数
AP=0#实际玩家
PL=[“主机”]#玩家列表
AE=0#实际实体
TE=0#实体总数
EL=[“| PlayerEntity$[数据]|”]#实体列表
PI=[]#播放器英特尔(播放器名称、播放器总数、播放器代码)(las comunicaciones公寓)
order=None#在公司内部对公司的身份(ej:nombre de la entidad)进行可变保留
内容=无#可变信息保留
传入=0#变量保留段分析
def login():
全球AP
全球TP
全球损益
PJ=str(传入).split(“$”[1]#传入播放器
如果AP TP:
PL.append(str(“Player”+str(AP))#Agregar jugador a la lista
TP=int(AP)
def identity():#连续确认应答者的身份,在列表中确认应答者的身份
全球TE
全球AE
全球EL
全球AP
全球损益
PJ=str(传入).split(“$”[1]#传入播放器
PE=str(传入)。拆分(“$”[2]#传入实体
如果AE TE:
EL.append(“|”+PL[AP]+”-“+PE+“$”+str(传入)。拆分(“$”[3]+“|”)
TE=int(AE)
def main():
全球AP
全球AE
全球TE
全球传入
conexion,ip=mi_socket.accept()
传入=conexion.recv(1024)
登录()
send(str(“#”+str(PL[AP])+“#”+str(EL[1:TE+1])+“#”)encode())
AP=0
AE=0
conexion.close()
尽管如此:
main()

Try.在文档中,“Pickling”是将Python对象层次结构转换为字节流的过程,“unpickling”是反向操作,即将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构”。是一个使用pickle和sockets的示例。非常感谢,这正是我所需要的,也感谢学习它,我学会了如何更好地使用字典,所以基本上你把我从固有脚本XD的文字页面中解救了出来