Obecnie szukam informacji z Ten plik .txt. Plik wydaje się być ograniczony. Uważam, aby przeanalizować podstawową wartość (tj. 000000) jako kluczowy klucz i nazwa firmy (tj. Xerox Corporation) jako wartość słownika. Więc jeśli na przykład patrzę w górę w moim słowniku Klucz 000001, Xerox Corporation zostałby zwrócony jako odpowiednia wartość.

Próbowałem parsowania pliku

Czy jest jakiś sposób, aby uchwycić wartość poprzedzającą termin "podstawa 16" na przykład, a następnie termin, który następuje, aby wykonać wpis słownika?

Wielkie dzięki

1
thefragileomen 9 listopad 2011, 20:29

3 odpowiedzi

result = dict()
for lig in open('oui.txt'):
    if 'base 16' in lig:
        num, sep, txt = lig.strip().partition('(base 16)')
        result.[num.strip()] = txt.strip()
1
dugres 9 listopad 2011, 16:36
def oui_parse(fn='oui.txt'):
    with open(fn) as ouif:
        content = ouif.read()
    for block in content.split('\n\n'):
        lines = block.split('\n')

        if not lines or not '(hex)' in lines[0]: # First block
            continue

        assert '(base 16)' in lines[1]
        d = {}
            d['oui'] = lines[1].split()[0]
        d['company'] = lines[1].split('\t')[-1]
        if len(lines) == 6:
            d['division'] = lines[2].strip()
        d['street'] = lines[-3].strip()
        d['city'] = lines[-2].strip()
        d['country'] = lines[-1].strip()
        yield d

oui_info = list(oui_parse())
1
phihag 9 listopad 2011, 16:42
>>> import urllib
... 
... f = urllib.urlopen('http://standards.ieee.org/develop/regauth/oui/oui.txt')
... d = dict([(s[:6], s[22:].strip()) for s in f if 'base 16' in s])
... print d['000001']
XEROX CORPORATION
1
Steven Rumbalski 9 listopad 2011, 16:47