将.txt文件处理为字典(Python v2.7)
我现在想从这个 .txt 文件中提取和处理信息。这个文件看起来是用制表符分隔的。我想把16进制的值(比如说 000000)作为字典的键,把公司名称(比如说 Xerox Corporation)作为字典的值。举个例子,如果我在字典里查找键 000001,那么就应该返回对应的值 Xerox Corporation。
我试着把这个 .txt 文件当作 CSV 文件来解析,读取每隔几行的内容,但很不幸的是,里面没有规律,行数也不固定。
有没有办法在“base 16”这个词之前捕捉到值,然后再捕捉到它后面的词,以便创建字典条目呢?
非常感谢!
4 个回答
1
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
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序做一些特定的事情,比如处理数据或者执行某些操作。为了实现这些功能,我们会使用一些代码块,这些代码块就像是程序的“指令”,告诉计算机该怎么做。
在这个例子中,代码块
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
好的,条目是用两个空行分开的。第二行总是以16进制表示。第一个制表符前的数据是16进制的密钥,最后一部分是公司名称。
import urllib
inputfile = urllib.urlopen("http://standards.ieee.org/develop/regauth/oui/oui.txt")
data = inputfile.read()
entries = data.split("\n\n")[1:-1] #ignore first and last entries, they're not real entries
d = {}
for entry in entries:
parts = entry.split("\n")[1].split("\t")
company_id = parts[0].split()[0]
company_name = parts[-1]
d[company_id] = company_name
一些结果:
40F52E: Leica Microsystems (Schweiz) AG
3831AC: WEG
00B0F0: CALY NETWORKS
9CC077: PrintCounts, LLC
000099: MTX, INC.
000098: CROSSCOMM CORPORATION
000095: SONY TEKTRONIX CORP.
000094: ASANTE TECHNOLOGIES
000097: EMC Corporation
000096: MARCONI ELECTRONICS LTD.
000091: ANRITSU CORPORATION
000090: MICROCOM
000093: PROTEON INC.
000092: COGENT DATA TECHNOLOGIES
002192: Baoding Galaxy Electronic Technology Co.,Ltd
90004E: Hon Hai Precision Ind. Co.,Ltd.
002193: Videofon MV
00A0D4: RADIOLAN, INC.
E0F379: Vaddio
002190: Goliath Solutions