問題背景:下載了2018 IEEE 最新的 oui.txt 文件。里面包含了 設備 MAC 地址的前六位對應的廠商。要做的工作是,將海量設備的 MAC 地址與 oui.txt 文件的信息比對,統計出 蘋果,華為,小米,OPPO,VIVO 這5家廠商的占比情況。oui.txt 文檔里面的內容如下圖所示。
oui.txt 文件中有很多冗余信息。現在只關心前 6 位 mac 地址和五個廠商的對應關系。所以,對 oui.txt 里的數據清洗一下。
處理 oui.txt 出現的問題:
1.按照下面的寫法,會報錯
1 with open('data/oui.txt') as f: 2 for line in f.readlines(): 3 if('Apple' in line and '-' not in line): 4 print(line)
看來是編碼問題,搜索了別人相關問題的回答,然后嘗試方法2:
1 with open('data/oui.txt', encoding='gb18030') as f: 2 for line in f.readlines(): 3 if('Apple,' in line and '-' not in line): 4 print(line)
結果依舊出錯。
再次嘗試下面的的代碼:
1 with open('data/oui.txt', encoding='gb18030', errors='ignore') as f: 2 for line in f.readlines(): 3 if('Apple,' in line and '-' not in line): 4 print(line)
就成功了。但是不太理解這個 error=‘ignore’ 會不會讓我需要的信息漏讀。
聰明的大虎給我提供了一個思路:可以用 utf-8
所以改成下面的樣子:
1 with open('data/oui.txt', encoding='utf-8') as f: 2 for line in f.readlines(): 3 if('Apple,' in line and '-' not in line): 4 print(line)
這次成功,完全讀取出來了,整理出的格式如下:IEEE分配給蘋果的前六位mac地址太多,這里只展示一部分。
果然,看書敲代碼學習是一回事,自己做東西出來是另外一回事