GVKun编程网logo

Python-将sock.recv转换为字符串(sock.recv python)

26

此处将为大家介绍关于Python-将sock.recv转换为字符串的详细内容,并且为您解答有关sock.recvpython的相关问题,此外,我们还将为您介绍关于python–将字符串转换为字典、py

此处将为大家介绍关于Python-将sock.recv转换为字符串的详细内容,并且为您解答有关sock.recv python的相关问题,此外,我们还将为您介绍关于python – 将字符串转换为字典、python 字符串、数字转换为bytes和bytes转换为字符串、python-3.x – 在Python 3中没有显式打开文件时,将字节转换为字符串、Python-将元组列表转换为字符串的有用信息。

本文目录一览:

Python-将sock.recv转换为字符串(sock.recv python)

Python-将sock.recv转换为字符串(sock.recv python)

我正在研究python和网络。

while True:   data = sock.recv(10240)

肯定是在听。但这似乎需要转换为文本字符串。

我见过有人使用 struct.unpack() ,但是我不确定它是如何工作的。转换方式是什么?

答案1

小编典典

您从中得到的recv是一个bytes字符串:

从套接字接收数据。返回值是一个字节对象,表示接收到的数据。

在Python
3.x中,要将bytes字符串转换为Unicode文本str字符串,您必须知道该字符串使用什么字符集编码,因此可以调用decode。例如,如果它是UTF-8:

stringdata = data.decode(''utf-8'')

(在Python 2.x中,bytes它和一样str,因此您已经 有了
一个字符串。但是,如果要获取Unicode文本unicode字符串,则与3.x中的相同。)

人们经常使用的原因struct是数据不仅是8位或Unicode文本,而是其他某种格式。例如,您可以将每个消息作为“
netstring
”发送:长度(作为ASCII数字字符串),后跟一个:分隔符,然后length是UTF-8字节,然后是一个,-如b"3:Abc,"。(格式上有一些变体,但这是伯恩斯坦标准的网络字符串。)

人们使用netstrings或其他类似技术的原因是,在使用TCP时需要某种分隔消息的方法。每个都recv可以给您对方传递的一半send,或者可以让您获得3分send和4分之一。因此,您必须积累一个recv数据缓冲区,然后再将消息拉出。而且,您需要某种方法来告知一条消息何时结束,下一条消息何时开始。如果您只是发送没有任何换行符的纯文本消息,则可以仅使用换行符作为分隔符。否则,您将不得不提出其他建议-
可能是网串,或者\0用作分隔符,或者使用换行符作为分隔符,但在数据中转义了实际的换行符,或者使用某些自定界的结构化格式(例如JSON)。

python – 将字符串转换为字典

python – 将字符串转换为字典

我知道这看起来像一个愚蠢的问题,但无论如何.

我正在尝试将字典的字符串表示转换回字典.

我的工作流程如下:

d = {1:2}
s = str(d)

当我做:

dict(s)

我明白了:

ValueError: dictionary update sequence element #0 has length 1; 2 is required

当我这样做时:

json.loads(s)

我明白了:

ValueError: Expecting property name: line 1 column 1 (char 1)

如何将其转换回字典?

更新:

我应该提一下,实际数据如下:

{‘cell_num’: u”,‘home_num’: u’16047207276′,‘registration_country’:
u’US’,‘registration_ip’: u’71.102.221.29′,‘last_updated’:
datetime.datetime(2010,9,27,15,41,59),‘address’: {‘country’:
u’US’,‘state’: u’CA’,‘zip’: u”,‘city’: u’Santa Barbara’,‘street’:
u”,‘confirmed’: False,‘created’: datetime.datetime(2010,6,24,10,
23),‘updated’: datetime.datetime(2010,23)},
‘old_home_num’: u’16047207276′,‘old_cell_num’: u”}

在这种情况下,使用json.loads和ast.literal_eval()的选项是不合适的.
所以我进一步尝试用pickle标准python库反序列化它.

import pickle

pickle.loads(data)

但后来我得到:

KeyError: ‘{‘

解决方法

如果你想要一个可移植的字符串表示,使用s = json.dumps(d),然后可以使用json.loads(s)重新加载

但是,这仅限于JSON兼容类型.如果你只想在python中使用它,最强大的选项是pickle(小心:永远不要破坏不受信任的数据!).

要使用pickle.loads()创建一个可加载的字符串,您需要使用pickle.dumps()从原始对象创建它(即就像您使用json但使用pickle一样).

但是,如果您已经发布了该字符串,则可以使用eval(s)将其评估为python表达式.这通常是一个坏主意,并且使用repr仅适用于实际具有有效python代码的repr的对象.

python 字符串、数字转换为bytes和bytes转换为字符串

python 字符串、数字转换为bytes和bytes转换为字符串

最近在搞一个socket,用python向C#服务器发送bytes和从服务器接收bytes,搞了一天基本弄清楚了这些转换关系。

建立一个空的bytes数组:

a=bytes(5)
print(a)

  执行结果:

b''\x00\x00\x00\x00\x00''

 将int转化为bytes(大端字节序):

def intToBytes(value, length):
    result = []
    for i in range(0, length):
        result.append(value >> (i * 8) & 0xff)
    result.reverse()
    result_bytes=bytes(result)
    return result_bytes

print(intToBytes(-95,3))

  执行结果:

b''\xff\xff\xa1''下

下班了,后面补哈

将字符串转为bytes:

python-3.x – 在Python 3中没有显式打开文件时,将字节转换为字符串

python-3.x – 在Python 3中没有显式打开文件时,将字节转换为字符串

我正在使用Requests模块来授权,然后从Web API中提取csv内容,并使其在 Python 2.7中正常运行.我现在想在Python 3.5中编写相同的脚本,但遇到一些问题:

"iterator should return strings,not bytes (did you open the file in text mode?)"

requests.get似乎返回字节而不是字符串,这似乎与转移到Python 3.x时看到的编码问题有关.错误在最后一行的第3行引发:next(读者).在Python 2.7中,这不是问题,因为csv函数是在’wb’模式下处理的.

这篇文章非常相似,但由于我没有直接打开csv文件,我似乎无法强制响应文本以这种方式编码:
csv.Error: iterator should return strings,not bytes

countries = [''UK'',''US'',''CA'']
datelist = [1,2,3,4]
baseurl = ''https://somewebsite.com/exporttoCSV.PHP''

#--- For all date/cc combinations
for cc in countries:
    for d in datelist:

        #---Build API String with variables
        url = (baseurl + ''?data=chart&output=csv'' +
               ''&dataset='' + d + 
               ''&cc='' + cc)

        #---Run API Call and create reader object
        r = requests.get(url,auth=(username,password))
        text = r.iter_lines()
        reader = csv.reader(text,delimiter='','')

        #---Write csv output to csv file with territory and date columns
        with open(cc + ''_''+ d +''.csv'',''wt'',newline='''') as file:
            a = csv.writer(file)
            a.writerow([''position'',''id'',''title'',''kind'',''peers'',''territory'',''date'']) #---Write header line
            next(reader) #---Skip original headers
            for i in reader:
                a.writerow(i +[countrydict[cc]] + [datevalue])

解决方法

如果不能测试您的确切场景,我相信这应该通过将text = r.iter_lines()更改为:

text = [line.decode(''utf-8'') for line in r.iter_lines()]

这应该将r.iter_lines()读入的每一行从字节串解码为csv.reader可用的字符串

我的测试用例如下:

>>> iter_lines = [b''1,4'',b''2,4,5'',b''3,5,6'']
>>> text = [line.decode(''utf-8'') for line in iter_lines]
>>> text
[''1,''2,''3,6'']
>>> reader = csv.reader(text,'')
>>> next(reader)
[''1'',''2'',''3'',''4'']
>>> for i in reader:
...     print(i)
...
[''2'',''4'',''5'']
[''3'',''5'',''6'']

Python-将元组列表转换为字符串

Python-将元组列表转换为字符串

将元组列表转换为字符串的最Python方式是哪种?

我有:

[(1,2),(3,4)]

而且我要:

"(1,4)"

我对此的解决方案是:

l=[(1,4)]
s=""
for t in l:
    s += "(%s,%s)," % t
s = s[:-1]

有没有更Python的方式来做到这一点?

我们今天的关于Python-将sock.recv转换为字符串sock.recv python的分享已经告一段落,感谢您的关注,如果您想了解更多关于python – 将字符串转换为字典、python 字符串、数字转换为bytes和bytes转换为字符串、python-3.x – 在Python 3中没有显式打开文件时,将字节转换为字符串、Python-将元组列表转换为字符串的相关信息,请在本站查询。

本文标签: