如何在python3中删除b符号
如何从python3脚本中删除b
符号?如何在python3中删除b符号
import subprocess
get_data=subprocess.check_output(["df -k | awk '{print $6}'"],shell=True)
data_arr=get_data.split()
data_arr.pop(0)
data_arr.pop(0)
for i in data_arr[:]:
print(str(i))
输出
b'/dev/shm'
b'/run'
b'/sys/fs/cgroup'
b'/'
b'/tmp'
b'/test'
b'/boot'
b'/home'
b'/var'
b'/mnt/install'
b'/mnt/snapshot'
b'/mnt/share'
b'/mnt/storage'
b'/mnt/linux'
b'/mnt/download'
b'/run/user/1001'
b
的符号表示的check_process
输出为bytes
,而不是一个str
。删除它,最好的办法是将输出转换成字符串你做任何进一步的工作之前它:
byte_data=subprocess.check_output(["df -k | awk '{print $6}'"],shell=True)
str_data = byte_data.decode('utf-8')
data_arr=str_data.split()
...
的decode
方法将带您可能必须在字符串中任何Unicode的照顾。如果您的默认编码(或者我认为awk
使用的编码)不是UTF-8
,请使用上例中的正确编码替换。
解决此问题的一种更好的方法是告诉check_output
将stdout
作为文本流打开。最简单的方法是添加一个universal_newlines=True
的说法,这将使用默认的编码当前区域:
str_data = subprocess.check_output(["df -k | awk '{print $6}'"], shell=True, universal_newlines=True)
或者,您也可以指定一个明确的编码:
str_data = subprocess.check_output(["df -k | awk '{print $6}'"], shell=True, encoding='utf-8')
在这两种情况下,您不需要解码,因为输出已经是str
而不是bytes
。
@jsbueno。就这样。固定。 –
非常感谢这是非常棒的解决方案。有一个愉快的长周末和复活节到所有 – user3661564
@ user3661564。用更好的答案做了更新。请选择适合您的答案。 –
我们怎么知道你的意思,朋友? –
我看到:当它将结果作为二进制返回时,返回'b'前缀'check_output'。然后,将字节解码为字符串。 –
@ Jean-FrançoisFabre。字节,而不是二进制。 –