用 jupyter notebook 開啟 oui.txt 檔案出現的問題及解決方案
阿新 • • 發佈:2018-12-25
問題背景:下載了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 forline 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地址太多,這裡只展示一部分。
果然,看書敲程式碼學習是一回事,自己做東西出來是另外一回事