Python中调用open()读取oui.txt失败问题求助
解决PySimpleGUI工具中OUI文件找不到的问题
核心问题是运行时的工作目录和脚本所在目录不一致——单独跑查询脚本时,当前工作目录就是脚本所在的文件夹,但整合到PySimpleGUI工具后,程序的工作目录可能变成你启动工具的路径(比如桌面、下载文件夹),导致找不到同目录的oui.txt。
给你几个靠谱的解决步骤:
1. 用脚本绝对路径拼接OUI文件路径
不要依赖当前工作目录,直接获取你的工具脚本所在的文件夹,再拼接oui.txt的路径,这是最稳妥的方法:
用Path模块(推荐)
from pathlib import Path # 获取当前脚本所在目录的绝对路径 script_folder = Path(__file__).parent.resolve() # 拼接oui.txt的完整路径 oui_file = script_folder / "oui.txt" # 测试读取与查询逻辑 try: with open(oui_file, "r") as f: # 提取测试MAC的OUI部分:90:DE:80 → 转成90-DE-80(适配oui.txt格式) test_mac = "90:DE:80:21:36:7E" oui_part = test_mac[:8].replace(":", "-").upper() # 遍历文件匹配OUI for line in f: if oui_part in line: print(f"厂商信息:{line.strip()}") break except FileNotFoundError: print(f"找不到OUI文件,实际查找路径:{oui_file}")
用os模块写法
import os script_folder = os.path.dirname(os.path.abspath(__file__)) oui_file = os.path.join(script_folder, "oui.txt")
2. 打印路径快速排查
可以在代码里加一行打印,确认程序实际在找哪个路径的oui.txt,方便定位问题:
print(f"当前尝试读取的OUI文件路径:{oui_file}")
如果打印的路径不是你预期的脚本目录,就说明工作目录确实不对,上面的绝对路径方法就能解决。
3. 打包工具时需包含oui.txt
如果你的工具是用PyInstaller打包成exe/app的,必须把oui.txt一起打包进去:
- Windows下打包命令:
pyinstaller --add-data "oui.txt;." your_tool.py - Mac/Linux下:
pyinstaller --add-data "oui.txt:." your_tool.py
这样打包后,程序运行时才能正确找到oui.txt文件。
测试你的MAC地址90:DE:80:21:36:7E,对应的OUI是90-DE-80,查询oui.txt应该能找到Hewlett Packard Enterprise的相关条目。
内容的提问来源于stack exchange,提问作者Christopher Temple
相关产品推荐
相关产品推荐

