现在我列出所有usb的信息,只想提取特定的信息,“大容量存储设备”
我的预期输出是:
idVendor idProduct Manufacturer - Product
1133 49271 Logitech - USB Optical Mouse
1423 37728 - USB Reader
34148 4096 JetFlash - Mass Storage Device
7531 2 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
7531 3 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
5117 2112 Generic - External
7531 2 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
7531 3 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
(Mass Storage Device is : 34148 4096 JetFlash - Mass Storage Device)我的研究表明,我可以使用regular expression和re.findall提取数据,或者从这里使用if。
Python regex to match a specific word if <keyword> in str: print('that line')
我正在整理打印字符串,并正确地打印出预期的行,尝试代码如下:(尝试使用if条件)
import usb.core
import usb.backend.libusb1
import re
def list_USB_all_info():
print ( 'idVendor idProduct Manufacturer - Product')
busses = usb.busses()
for bus in busses:
for dev in bus.devices:
if dev:
xdev = usb.core.find(idVendor=dev.idVendor, idProduct=dev.idProduct)
if xdev._manufacturer is None:
xdev._manufacturer = usb.util.get_string(xdev, xdev.iManufacturer)
if xdev._product is None:
xdev._product = usb.util.get_string(xdev, xdev.iProduct)
print ('%8d %9d %s - %s' % (dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip()))
if "Mass Storage Device" in str:
print('that Mass Storage Device line info')
list_certain_data = "Mass Storage Device is : "
list_Mass_Storage_Device = (str(dev.idVendor) + " "+ str(dev.idProduct)+ " | "+str(xdev._manufacturer)+ " | "+str(xdev._product))
return list_certain_data, list_Mass_Storage_Device
result = list_USB_all_info()
print(result)输出
idVendor idProduct Manufacturer - Product
1133 49271 Logitech - USB Optical Mouse
1423 37728 - USB Reader
34148 4096 JetFlash - Mass Storage Device
7531 2 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
7531 3 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
5117 2112 Generic - External
7531 2 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
7531 3 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
Traceback (most recent call last):
File "/home/joy/fe_dir/10_6_list_idvender_idProduct.py", line 34, in <module>
result = list_USB_all_info()
File "/home/joy/fe_dir/10_6_list_idvender_idProduct.py", line 26, in list_USB_all_info
if "Mass Storage Device" in str:
TypeError: argument of type 'type' is not iterable我自己也是这样做的,我可以先将所有输出结果保存在"all_in_string“中,然后将其保存为split(),然后保存用于回答的正则表达式
import usb.core
import usb.backend.libusb1
def list_USB_all_info():
print ( 'idVendor idProduct Manufacturer - Product')
busses = usb.busses()
all_in_string = ' '
for bus in busses:
for dev in bus.devices:
if dev:
xdev = usb.core.find(idVendor=dev.idVendor, idProduct=dev.idProduct)
if xdev._manufacturer is None:
xdev._manufacturer = usb.util.get_string(xdev, xdev.iManufacturer)
if xdev._product is None:
xdev._product = usb.util.get_string(xdev, xdev.iProduct)
print ('%8d %9d %s - %s' % (dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip()))
A = ('%8d %9d %s - %s' % (dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip()))
all_in_string += A + "/end/"+"\n"
print ("= = = =")
#if "Mass Storage Device" in str:
# print('that Mass Storage Device line info')
#list_certain_data = "Mass Storage Device is : "
#list_Mass_Storage_Device = (str(dev.idVendor) + " "+ str(dev.idProduct)+ " | "+str(xdev._manufacturer)+ " | "+str(xdev._product))
return all_in_string
result = list_USB_all_info()
print(result)发布于 2022-10-06 04:09:09
我来到下面:
import usb.core
import usb.backend.libusb1
def list_USB_all_info():
print ( 'idVendor idProduct Manufacturer - Product')
busses = usb.busses()
all_in_string = ' '
for bus in busses:
for dev in bus.devices:
if dev:
xdev = usb.core.find(idVendor=dev.idVendor, idProduct=dev.idProduct)
if xdev._manufacturer is None:
xdev._manufacturer = usb.util.get_string(xdev, xdev.iManufacturer)
if xdev._product is None:
xdev._product = usb.util.get_string(xdev, xdev.iProduct)
print ('%8d %9d %s - %s' % (dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip()))
A = ('%8d %9d %s - %s' % (dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip()))
all_in_string += A + "/end/"+"\n"
all_in_string_splited = all_in_string.split("/end/")
print ("= = = =")
all_in_string_match_Mass_Storage_Device = [s for s in all_in_string_splited if "Mass Storage Device" in s]
return all_in_string_match_Mass_Storage_Device
result = list_USB_all_info()
print(result)https://stackoverflow.com/questions/73967969
复制相似问题