此处将为大家介绍关于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 – 将字符串转换为字典
- python 字符串、数字转换为bytes和bytes转换为字符串
- python-3.x – 在Python 3中没有显式打开文件时,将字节转换为字符串
- 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 – 将字符串转换为字典
我正在尝试将字典的字符串表示转换回字典.
我的工作流程如下:
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: ‘{‘
解决方法
但是,这仅限于JSON兼容类型.如果你只想在python中使用它,最强大的选项是pickle
(小心:永远不要破坏不受信任的数据!).
要使用pickle.loads()创建一个可加载的字符串,您需要使用pickle.dumps()从原始对象创建它(即就像您使用json但使用pickle一样).
但是,如果您已经发布了该字符串,则可以使用eval(s)
将其评估为python表达式.这通常是一个坏主意,并且使用repr仅适用于实际具有有效python代码的repr的对象.
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中没有显式打开文件时,将字节转换为字符串
"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 = [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方式是哪种?
我有:
[(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-将元组列表转换为字符串的相关信息,请在本站查询。
本文标签: