#!/usr/bin/python import sys class Vendor(object): def __init__(self): self.name = "" self.num = "" self.devices = {} class Device(object): def __init__(self): self.name = "" self.num = "" self.subvendors = {} self.vendor = "" fn = "/usr/share/hwdata/pci.ids" fo = open(fn, 'r') vendors = {} curvendor = None curdevice = None for line in fo.readlines(): if line.startswith('#') or not line.strip(): continue elif not line.startswith('\t'): curvendor = Vendor() curvendor.num = line[0:4] curvendor.name = line[6:-1] vendors[curvendor.num] = curvendor continue elif line.startswith('\t\t'): line = line.replace('\t', '') thisdev = Device() thisdev.vendor = line[0:4] thisdev.num = line[5:9] thisdev.name = line[11:-1] subvend = Vendor() subvend.num = thisdev.vendor subvend.name = "" if not curdevice.subvendors.has_key(subvend.num): curdevice.subvendors[subvend.num] = subvend subvend.devices[thisdev.num] = thisdev else: subvend = curdevice.subvendors[subvend.num] subvend.devices[thisdev.num] = thisdev continue elif line.startswith('\t'): line = line.replace('\t', '') curdevice = Device() curdevice.num = line[0:4] curdevice.name = line[6:-1] curdevice.vendor = curvendor.num curvendor.devices[curdevice.num] = curdevice continue else: print line continue vids = vendors.keys() vids.sort() for vid in vids: vend = vendors[vid] print '%s %s' % (vend.num, vend.name) dids = vend.devices.keys() dids.sort() for did in dids: dev = vend.devices[did] print '\t%s %s' % (dev.num, dev.name) svids = dev.subvendors.keys() svids.sort() for svid in svids: svend = dev.subvendors[svid] sdids = svend.devices.keys() sdids.sort() for subdevid in sdids: subdev = svend.devices[subdevid] print '\t\t%s %s %s' % (subdev.vendor, subdev.num, subdev.name)