python byte和str互相转换

最近为了体验python实时画图功能,必须把python升级到更高的版本(升级到3.6.8),安装matplotlib库,但是发现一些之前的旧例子无法正常运行,在调试的时候发现执行命令后,返回的值是byte而不是str。所以这里总结下

环境:Python 3.6.8

1.转换方法

  • 1)byte转换成str
    • str(bdata, encoding = “utf-8”) ,其中bdata为byte类型的数据,encoding为编码格式,也可以是GBK,unicode,ASCII.
    • bytes.decode(bb),其中bb即为byte类型的数据
  • 2)str转换成byte
    • bytes(str1, encoding = “utf8”) ,其中str1要转换的str数据,同样endoding为编码格式,也可以是GBK,unicode,ASCII.
    • str.encode(ss) ,其中ss即为str类型的数据

具体都在例子中,对照例子和打印结果查看确认下。

#byte ----------> str
print('1.byte ----------> str')
bdata = b'I\'armwind'
print(' bdata type:%s' %type(bdata))

byte2str = str(bdata, encoding = "utf-8")
print(' byte2str type:%s' %type(byte2str))

#str ----------> byte
print('2.str ----------> byte')
str1 = "hello world"
print(' str1 type:%s' %type(str1))
str2byte = bytes(str1, encoding = "utf8")  
print(' str2byte type:%s' %type(str2byte))

# simple default method
print('\n3.simple default method')
# str to bytes
ss = "armwind"
print(' ss type:%s' %type(ss))
s2b = str.encode(ss)
print(' s2b type:%s' %type(s2b))
# bytes to str
bb = b'hello world'
print(' bb type:%s' %type(bb))
b2s = bytes.decode(bb)
print(' b2s type:%s' %type(b2s))

打印结果:

D:\test\python>python 1.py
1.byte ----------> str
 bdata type:<class 'bytes'>
 byte2str type:<class 'str'>
2.str ----------> byte
 str1 type:<class 'str'>
 str2byte type:<class 'bytes'>

3.simple default method
 ss type:<class 'str'>
 s2b type:<class 'bytes'>
 bb type:<class 'bytes'>
 b2s type:<class 'str'>

2.案例实践(获取android进程ID)

下面是获取Android某一个进程的PID的脚本,只需要修改进程名字即可(电脑需连接Android手机)。

import subprocess
PROCESS_NAME = 'mediaserver'

cmd2 = ('adb shell ps')
process2 = subprocess.Popen(cmd2.split(), stdout=subprocess.PIPE)
cmd_ret2 = process2.stdout.read()
cmd_list = cmd_ret2.split('\n');
for cam in cmd_list :
	if (PROCESS_NAME in cam) :
	cam = cam.split()
	print("pid:%d" %cam[1])

运行结果:

D:\test\python>python 1.py
Traceback (most recent call last):
  File "1.py", line 7, in <module>
    cmd_list = cmd_ret2.split('\n');
TypeError: a bytes-like object is required, not 'str'

修改后的代码把byte先转换成str类型,然后用str的内部函数,对字符串进行分割。

import subprocess
PROCESS_NAME = 'mediaserver'

cmd2 = ('adb shell ps')
process2 = subprocess.Popen(cmd2.split(), stdout=subprocess.PIPE)
cmd_ret2 = process2.stdout.read()
cmd_str = str(cmd_ret2, encoding = "utf-8")
cmd_list = cmd_str.split('\n');#按换行字符进行分割
for cam in cmd_list :
    if (PROCESS_NAME in cam) :
        cam = cam.split()
        print("pid:%s" %cam[1])

运行之后:

D:\test\python>python 1.py
pid:339
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值