python - 错误 :cannot use a string pattern on a bytes-like object

标签 python python-requests python-3.8

我正在使用 Python RegEx 显示连接到计算机的所有互联网无线配置文件。出现错误 (TypeError: cannot use a string pattern on a bytes-like object)在我的倒数第二行请任何人帮助识别我的错误。谢谢

我的程序

import subprocess,re
command = "netsh wlan show profile"
output = subprocess.check_output(command, shell=True)  
network_names = re.search("(Profile\s*:\s)(.*)", output)  
print(network_names.group(0))

………………………………………………………………………………………………………………………………………………………… ...

错误
line 8, in <module>


 return _compile(pattern, flags).search(string)


TypeError: cannot use a string pattern on a bytes-like object

最佳答案

Python 3 区分“bytes”和“string”类型;这对于 Unicode 字符串尤其重要,其中每个字符可能超过一个字节,具体取决于字符和编码。

正则表达式可以用于任何一个,但它必须是一致的——在字节中搜索字节,或在字符串中搜索字符串。

根据您的需要,有两种解决方案:

  • 解码output在搜索之前变量;例如,使用:output_text = output.decode('utf-8')
    这取决于您使用的编码; UTF-8 是当今最常见的。

    匹配的组将是一个字符串。
  • 通过添加 b 来搜索字节正则表达式的前缀。正则表达式也应该使用 r前缀,所以它变成:re.search(br"(Profile\s*:\s)(.*)", output)
    匹配的组将是一个字节对象。
  • 关于python - 错误 :cannot use a string pattern on a bytes-like object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61720217/

    相关文章:

    python - 使用python请求库登录网站

    python - 为什么 Zappa 部署缺少虚拟环境中存在的所有/大多数包?

    python - 如何将默认值数组添加到 ArrayField?

    python - 如何将数据插入sqlite数据库中的特定列?

    python - 如何使用 defaultdict 行为扩展 OrderedDict

    python - 两个不同的子进程不生成唯一的编号

    ubuntu-14.04 - Ubuntu 14.04 上的 Python3.8

    python - 如果 while 循环处于事件状态, turtle 图形不会响应 onkey() 命令

    python - 使用python请求登录后无法下载文件

    python - 请求流示例在我的环境中不起作用