Регулярное выражение не работает в скрипте Python

Регулярное выражение не работает. пожалуйста, найдите детали ниже.

cpu_pattern = re.compile('.*CPU.*(usr|user).*nice.*sys.*')

part = b'11:40:24 AM     CPU      %usr     %nice      %sys   %iowait    %steal      %irq     %soft    %guest     %idle\n11:40:25 AM     all      0.00      0.00      0.08      0.00      0.00      0.00      0.00      0.00     99.92'

Условие ЕСЛИ:

if cpu_pattern.search(part): if cpu_usage == '': cpu_usage == part

Ошибка:

TypeError('cannot use a string pattern on a bytes-like object')

2 ответа

Используйте приведенный ниже код для преобразования байта в строку в Python, который решит вашу проблему:

part= part.decode("utf-8") 

Поместите код выше после part объект

Выход print(part):

11:40:24 AM     CPU      %usr     %nice      %sys   %iowait    %steal      %irq     %soft    %guest     %idle                         
11:40:25 AM     all      0.00      0.00      0.08      0.00      0.00      0.00      0.00      0.00     99.92      

partне строка, это последовательность байтов. Теперь у вас есть два варианта; что более уместно, зависит от того, какpart было создано:

  1. Выполняйте побайтовое сопоставление, а не сопоставление строк, используя шаблон последовательности байтов:

    cpu_pattern = re.compile(b'.*CPU.*(usr|user).*nice.*sys.*')
    
  2. Расшифровать parts последовательность байтов с использованием соответствующей кодировки, например UTF-8:

    parts_str = parts.decode('utf-8')
    
Другие вопросы по тегам