Python открыть только один каталог, который начинается с указанных c номеров - PullRequest
1 голос
/ 01 апреля 2020

Я хочу иметь возможность открывать каталоги, набирая только первые цифры номера каталога. В C: / Orders / у меня есть несколько каталогов:

  1. 40_0
  2. 125_15
  3. 4012_0
  4. 4040_127
  5. 5445_0
  6. 4_67

Если я наберу на входе " 4012 ", откроется каталог 4012, но когда я наберу " 4"он открывает все каталоги, которые начинаются с 4, мне нужно открыть только один.

Кроме того, когда я набираю некоторые цифры, которые не соответствуют ни одному из существующих каталогов, он печатает ( «Ничего не найдено») столько раз, сколько каталогов находится в текущем каталоге. Я понятия не имею, как решить эту проблему.

Это то, что я пытался:

os.chdir("C:/Orders")
while True:
    orderNo = input("Type order number: ")
    for filename in os.listdir():
        if filename.startswith(orderNo):
            os.startfile(filename)
        else:
            print("Nothing found.")

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

вы можете использовать:

from pathlib import Path
from glob import glob

subfolders = list(map(Path, glob('"C:/Orders/*/')))
name_subfolder = {p.name : p for p in subfolders}


orderNo = input("Type order number: ")
while orderNo != 'exit':
    f = (e for e in name_subfolder.keys() if e.startswith(orderNo))

    try:
        os.startfile(next(f))
    except StopIteration:
        print("Nothing found.")

    orderNo = input("Type order number: ")

вы берете все подпапки и строите диктовку name_subfolders, которая имеет в качестве ключа имя каждого subfolder и абсолютный путь, тогда вы можете взять ввод и проверьте, если имя какой-либо подпапки начинается с заданного ввода, если это так, то откроет вашу папку для вас, если не даст вам не найденное сообщение

0 голосов
/ 01 апреля 2020

Следующее должно напечатать первое, которое соответствует, и печатать только один раз в случае несоответствия «Ничего не найдено».

while True:
    orderNo = input("Type order number: ")
    for filename in os.listdir():
        if filename.startswith(orderNo):
            os.startfile(filename)
            break
     else:
         print("Nothing found.")

#Pay attention to where the else is put. This is a nice feature of python (the for else)
...