Выражение «value.get ()» возвращает несколько одинаковых значений - PullRequest
0 голосов
/ 30 октября 2018
Для приведенного ниже кода

в команде findspec я пытаюсь вернуть только путь к файлу и имена каталогов того, что вводит пользователь. Если файл не существует, отображается «Файл не найден».

Это часть, которая не работает:

def findspec():
    r1 = tar.get()
    rootdir = '.'
    for dirname, subdirlist, filelist in os.walk(rootdir, topdown=False):
        for file in filelist:
            if fnmatch.fnmatch(file, tar.get()):
                list1.insert(END, dirname + "--->" + str(r1))
            else:
                list1.insert(END, "File not found")

Должно быть возвращено это:

User/%User%/directory ---> config.py
User/%User%/directory/static ---> config.py

Вместо этого он возвращает это:

File not FOund
File not Found
File not Found
File not Found
File not Found
File not Found
File not Found
File not Found
File not Found
File not Found
File not Found
User/%User%/directory ---> config.py
File not Found
File not Found
User/%User%/directory/static ---> config.py
File not Found
File not Found
File not Found
File not Found
File not Found
File not Found
File not Found

Исходный код ниже:

import os
import fnmatch
import tkinter
from tkinter import *
from difflib import get_close_matches

def searchdir():
    rootdir = '.'
    for dirname, subdirlist, filelist in os.walk(rootdir, topdown=False):
        for fname in filelist:
            list1.insert(END, dirname +  '\t%s' % fname)

def findspec():
    r1 = tar.get()
    rootdir = '.'
    for dirname, subdirlist, filelist in os.walk(rootdir, topdown=False):
        for file in filelist:
            if fnmatch.fnmatch(file, tar.get()):
                list1.insert(END, dirname + "--->" + str(r1))
            else:
                list1.insert(END, "File not found")

w=Tk()

b1 = Button(w, text="Search", command=findspec)
b1.grid(row=0, column=0, columnspan=2)

tar=StringVar()
e1 = Entry(w, textvariable=tar)
e1.grid(row=0, column=1, columnspan=4)

b2 = Button(w, text="Start", command=searchdir)
b2.grid(row=1, column=0, columnspan=2)

#listbox
list1=Listbox(w, height=17, width=75, selectmode=EXTENDED)
list1.grid(row=2, column=0, rowspan=7, columnspan=4, sticky=(N, S, E), pady=5, padx=5)

sb1=Scrollbar(w)
sb1.grid(row=2, column=4, rowspan=7, sticky='nsw', pady=5)
list1.configure(yscrollcommand=sb1.set)
sb1.configure(command=list1.yview)

sb2=Scrollbar(w, orient=HORIZONTAL)
sb2.grid(row=10, column=0, columnspan=4, sticky='esw', padx=5)
list1.configure(xscrollcommand=sb2.set)
sb2.configure(command=list1.xview)

list1.bind('<<ListboxSelect>>')

if __name__=='__main__':
    w.mainloop()

Я что-то делаю не так, я что-то упускаю или что-то другое? Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 октября 2018

for file in filelist: выполнит проверку if/else для каждого файла в filelist. Но кажется, что вы хотите выполнить предложение else не каждый раз, когда fnmatch.fnmatch() не удается, а только тогда, когда поиск исчерпан и результаты не добавлены в список, следовательно, когда len(filelist) < 1:

if fnmatch.fnmatch(file, r1):
    list1.insert(END, dirname + "--->" + str(r1))
elif list1.size() < 1:
    list1.insert(END, "File not found")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...