Python 3.6 - Регулярное выражение с - PullRequest
2 голосов
/ 10 марта 2019

Следующий код возвращает словарь номеров деталей из электронной таблицы и работает как задумано.

import openpyxl, os, pprint, re

wb = openpyxl.load_workbook('RiverbedInventory.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

max_row = sheet.max_row

inventory = {}

for row in range(1,max_row+1):
    prodName = sheet['G' + str(row)].value

    inventory.setdefault (prodName, {'count': -0})
    inventory[prodName] ['count'] += 1

pprint.pprint(inventory)

Я пытаюсь отфильтровать результаты с помощью регулярного выражения, чтобы возвращать только те номера деталей, которые соответствуют определенным критериям (в этом случае детали # начинаются с VCX).Я продолжаю получать сообщения об ошибках «TypeError: ожидаемая строка или байтовоподобный объект».Я немного погуглил, но не могу найти ответ.Вот код регулярного выражения, который я использую:

import openpyxl, os, pprint, re

wb = openpyxl.load_workbook('RiverbedInventory.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

max_row = sheet.max_row

steelhead = re.compile(r'VCX-\d+-\w+')

inventory = {}

for row in range(1,max_row+1):
    prodCode = sheet['G' + str(row)].value

    inventory.setdefault (prodCode, {'count': -0})
    inventory[prodCode]['count'] += 1

pprint.pprint (steelhead.findall(inventory))

рабочий против нерабочего

1 Ответ

0 голосов
/ 10 марта 2019

В steelhead.findall(inventory) вы передаете словарь вместо строки. re.findall ожидает строку в качестве второго аргумента.

Вы можете использовать словарь здесь:

print( {k: inventory[k] for k in inventory if steelhead.search(k)} )

См. Демонстрационную версию Python 3 :

import re
inventory = {'UMTS-UNV-E': {'count':59}, 'VCX-020-E': {'count':2}, 'VCX-030-E': {'count':3}}
steelhead = re.compile(r'VCX-\d+-\w+')
print( {k: inventory[k] for k in inventory if steelhead.search(k)} )

Выход: {'VCX-030-E': {'count': 3}, 'VCX-020-E': {'count': 2}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...