[英](Python) extract certain word from directory or list?
我有一個很酷的代碼可以檢測新的 USB 插件,我只想提取idVendor
和idProduct
,下面是原始的 function 和我試過的 function。
我通讀了如何從 Python 中的字典中提取所有值的問題? 之前,但我的情況似乎略有不同。
import time
from usb.core import find
from usb.util import get_string
import usb.backend.libusb1
def info_usb_device(dev):
xdev = find(idVendor=dev.idVendor, idProduct=dev.idProduct)
if xdev.bDeviceClass == 9: # don't list HUBs, see [USB class-codes](https://www.usb.org/defined-class-codes)
return
if xdev._manufacturer is None:
xdev._manufacturer = get_string(xdev, xdev.iManufacturer, langid=1033)
if xdev._product is None:
xdev._product = get_string(xdev, xdev.iProduct, langid=1033)
device_info = '[%20s] %8d %9d %s - %s' % (xdev.serial_number, dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip())
return (xdev.serial_number, device_info)
def add_usb_devices(device_dict):
new_devices = []
for bus in usb.busses():
for dev in bus.devices:
if dev is None:
continue
serial_info = info_usb_device(dev)
if serial_info is not None:
(serial, info) = serial_info
if serial not in device_dict:
new_devices.append(serial)
device_dict[serial] = info
return new_devices
if __name__ == "__main__":
device_dict = {}
print('%22s %8s %9s %s' % ('serial', 'idVendor', 'idProduct', 'Manufacturer - Product'))
print('-'*22, '-'*8, '-'*9, '-'*30)
# first scan
add_usb_devices(device_dict)
for device_info in device_dict.values():
print(device_info)
# next scans
for i in range(5): # run 5 more scans
new_serials = add_usb_devices(device_dict)
if len(new_serials) > 0:
print('** (scan %d) FOUND NEW USB DEVICES/SERIALS: %s' % (i, new_serials))
for serial in new_serials:
print(device_dict[serial])
time.sleep(7) # waiting 3 seconds before new scan
print('Scans completed.')
serial idVendor idProduct Manufacturer - Product
---------------------- -------- --------- ------------------------------
[ None] 1133 49271 Logitech - USB Optical Mouse
[ 2004888] 1423 37728 - USB Reader
[ 4234ICZMDJF5MWAK] 34148 4096 JetFlash - Mass Storage Device
[5334354E373539325A315A4B] 5117 2112 Generic - External
** (scan 2) FOUND NEW USB DEVICES/SERIALS: ['00000000000031']
[ 00000000000031] 4871 357 USBest Technology - USB Mass Storage Device
Scans completed.
idVendor
和idProduct
) 我嘗試拆分並列出device_dict[serial]
和 list[1],list[2] 可能是我想要的但似乎不正確。
import time
from usb.core import find
from usb.util import get_string
import usb.backend.libusb1
from dateutil import parser
def info_usb_device(dev):
xdev = find(idVendor=dev.idVendor, idProduct=dev.idProduct)
if xdev.bDeviceClass == 9: # don't list HUBs, see [USB class-codes](https://www.usb.org/defined-class-codes)
return
if xdev._manufacturer is None:
xdev._manufacturer = get_string(xdev, xdev.iManufacturer, langid=1033)
if xdev._product is None:
xdev._product = get_string(xdev, xdev.iProduct, langid=1033)
device_info = '[%20s] %8d %9d %s - %s' % (xdev.serial_number, dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip())
return (xdev.serial_number, device_info)
def add_usb_devices(device_dict):
new_devices = []
for bus in usb.busses():
for dev in bus.devices:
if dev is None:
continue
serial_info = info_usb_device(dev)
if serial_info is not None:
(serial, info) = serial_info
if serial not in device_dict:
new_devices.append(serial)
device_dict[serial] = info
return new_devices
if __name__ == "__main__":
device_dict = {}
print('%22s %8s %9s %s' % ('serial', 'idVendor', 'idProduct', 'Manufacturer - Product'))
print('-'*22, '-'*8, '-'*9, '-'*30)
# first scan
add_usb_devices(device_dict)
for device_info in device_dict.values():
print(device_info)
# next scans
for i in range(5): # run 5 more scans
new_serials = add_usb_devices(device_dict)
if len(new_serials) > 0:
print('** (scan %d) FOUND NEW USB DEVICES/SERIALS: %s' % (i, new_serials))
for serial in new_serials:
print(device_dict[serial])
time.sleep(4) # waiting 3 seconds before new scan
str_device_dict_serial = {}
str_device_dict_serial = device_dict[serial]
#splited_str_device_dict_serial= str_device_dict_serial.split(" ")
#list_splited_str_device_dict_serial = list(splited_str_device_dict_serial)
print('Scans completed.')
print("+ + + + + + +")
print(device_dict[serial])
print(type(device_dict[serial]))
print("+ + + +")
print(str_device_dict_serial)
print(type(str_device_dict_serial))
重新進口
AAA = “[01DZTW5EXY5TSUF8] 34148 4096 JetFlash - 大容量存儲設備”BBB = re.findall(r'\b\d+\b', AAA)
然后將此概念與要提取的字符串一起使用
import time from usb.core import find from usb.util import get_string import usb.backend.libusb1 import re def info_usb_device(dev): xdev = find(idVendor=dev.idVendor, idProduct=dev.idProduct) if xdev.bDeviceClass == 9: # don't list HUBs, see [USB class-codes](https://www.usb.org/defined-class-codes) return if xdev._manufacturer is None: xdev._manufacturer = get_string(xdev, xdev.iManufacturer, langid=1033) if xdev._product is None: xdev._product = get_string(xdev, xdev.iProduct, langid=1033) device_info = '[%20s] %8d %9d %s - %s' % (xdev.serial_number, dev.idVendor, dev.idProduct, str(xdev._manufacturer).strip(), str(xdev._product).strip()) return xdev.serial_number, device_info def add_usb_devices(device_dict): new_devices = [] for bus in usb.busses(): for dev in bus.devices: if dev is None: continue serial_info = info_usb_device(dev) if serial_info is not None: (serial, info) = serial_info if serial not in device_dict: new_devices.append(serial) device_dict[serial] = info return new_devices if __name__ == "__main__": device_dict = {} print('%22s %8s %9s %s' % ('serial', 'idVendor', 'idProduct', 'Manufacturer - Product')) print('-'*22, '-'*8, '-'*9, '-'*30) # first scan add_usb_devices(device_dict) for device_info in device_dict.values(): print(device_info) # next scans for i in range(5): # run 5 more scans new_serials = add_usb_devices(device_dict) if len(new_serials) > 0: print('** (scan %d) FOUND NEW USB DEVICES/SERIALS: %s' % (i, new_serials)) for serial in new_serials: print(device_dict[serial]) time.sleep(3) # waiting 3 seconds before new scan str_device_dict_serial = device_dict[serial] listed__device_dict_serial = re.findall(r'\b\d+\b', str_device_dict_serial) #splited_str_device_dict_serial= str_device_dict_serial.split(" ") print('Scans completed.') print("+ + + + + + + + + + + + +") print(str_device_dict_serial) print(type(str_device_dict_serial)) print("+ + + + + + + + + + + + +") print(device_dict[serial]) print(type(device_dict[serial])) print("+ + + + + + + + + + + + +") print(listed__device_dict_serial) print(type(listed__device_dict_serial))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.