Python - 使用 open() 时遇到问题

问题描述 投票:0回答:1

我有一个为工作制作的小工具,基本上可以打开一些网站并将内容复制到我的剪贴板,这样我就可以快速回答经常被问到的问题。我想在我的工具底部添加一个新功能,可以使用 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 循环移至其自己的函数中。我也慢慢地一点一点地删除代码,但它永远找不到文件,直到只剩下功能。

python-3.x
1个回答
0
投票

在我把头永远撞在墙上并发布这个之后,我决定,如果它在单独的文件中工作,我将将该文件转换为一个函数并导入它。这样效果很好。为了知识起见,我仍然很想知道为什么它不能像我试图让它工作的方式工作。

© www.soinside.com 2019 - 2024. All rights reserved.