我有一个为工作制作的小工具,基本上可以打开一些网站并将内容复制到我的剪贴板,这样我就可以快速回答经常被问到的问题。我想在我的工具底部添加一个新功能,可以使用 OUI 查找 MAC 的供应商。我有一个名为 oui.txt 的文件和 2 个 python 文件都位于同一目录中。我首先在自己的文件中构建我的 mac 查找脚本。看起来像这样......
mac = input("Enter MAC: ").upper().replace(':', '')[:6]
ouiList = []
filehandle = open("oui.txt", 'r')
dataList = filehandle.read()
for vendor in dataList.split('\n'):
ouiList.append(vendor.strip())
for i in ouiList:
if mac in i:
print(i)
非常简单,工作没问题。但是,当我将其移至我的工作工具时,我始终收到一条错误消息,指出它找不到 oui.txt,即使我的 python 文件和 oui.txt 都位于同一文件夹中。我不明白为什么一个文件可以找到它而另一个文件却找不到。我尝试了一些我在这里看到的建议的不同方法,包括使用 Path 模块来设置路径,以及使用 OS 模块来设置目录,这是我的代码的当前迭代。我想这可能与我的代码位于 while True 语句内(其中包含 If 块)有关,因此我将其作为函数移到所有内容之外,然后让我的 if 语句调用该函数,但同样的事情发生了。
这是当前的代码,删除了所有额外的工作内容,这是我用来测试 90:DE:80:21:36:7E 的随机 MAC
import os
import PySimpleGUI as sg
import webbrowser as wb
from tkinter import Tk
from AppOpener import open
def get_vendor():
mac = values["-MACINPUT-"].upper().replace(':', '')[:6]
ouiList = []
here = os.path.dirname(os.path.abspath(__file__))
filename = os.path.join(here, 'oui.txt')
filehandle = open(filename, 'r')
dataList = filehandle.read()
for vendor in dataList.split('\n'):
ouiList.append(vendor.strip())
for i in ouiList:
if mac in i:
window["-MACINPUT-"].update(i)
default_column = [
[sg.Input(default_text='', key="-MACINPUT-")],
[sg.OK("LOOKUP MAC", key="-LOOKUPMAC-")],
]
template_list_column = [
[sg.Column(default_column)]
]
layout = [
[sg.Column(template_list_column)]
]
window = sg.Window("Quick Links", layout, no_titlebar=True, grab_anywhere=True, resizable=True, size=(200, 500), right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT)
while True:
event, values = window.read()
if event == "Exit" or event == sg.WIN_CLOSED:
break
if event == "-LOOKUPMAC-":
get_vendor()
window.close()
我尝试使用 Path 和 Os 模块查找文件。我尝试将代码从 while 循环移至其自己的函数中。我也慢慢地一点一点地删除代码,但它永远找不到文件,直到只剩下功能。
在我把头永远撞在墙上并发布这个之后,我决定,如果它在单独的文件中工作,我将将该文件转换为一个函数并导入它。这样效果很好。为了知识起见,我仍然很想知道为什么它不能像我试图让它工作的方式工作。