【问题标题】:Python open only one directory that starts with specific numbersPython只打开一个以特定数字开头的目录
【发布时间】:2020-04-01 18:45:23
【问题描述】:

我希望能够通过仅键入目录号码的前几位来打开目录。 在 C:/Orders/ 我有几个目录:

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

如果我输入“4012”,它会打开 4012 目录,但是当我输入“4”时,它会打开 all 目录4开头的,我只需要打开一个。

此外,当我键入一些与任何现有目录都不匹配的数字时,它会打印(“Nothing found”)与当前目录中的目录数量一样多。我不知道如何解决这个问题。

这是我尝试过的:

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.")

【问题讨论】:

    标签: python directory startswith


    【解决方案1】:

    下面应该打印第一个匹配的,如果不匹配“Nothing found”,则只打印一次。

    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)
    

    【讨论】:

    • 不幸的是它不起作用。如果我输入 4 它会打开 4012 目录,它还会打印 Nothing Found。
    • 这可能是因为您没有将 else 语句放在 for 循环之外。 else 的缩进级别应与 for 相同。
    • 主要问题是我只需要打开一个目录。当我列出目录时,它会按某种顺序列出它们并打开错误的目录。如果我输入“40”,它仍然会打开“4012”
    • 你的问题不完整。您没有指定要打开哪个,我假设您想在有多个匹配项时打开其中任何一个。实际上,您需要指定首先要输出哪个(您可以根据此标准对目录列表进行排序)。
    【解决方案2】:

    你可以使用:

    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 的名称和绝对路径作为键,然后您可以输入并检查是否有任何子文件夹名称以给定的输入开头,如果是如果没有,该案例将为您打开您的文件夹,否则会给您一条未找到的消息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-16
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 2018-07-24
      • 1970-01-01
      相关资源
      最近更新 更多