【问题标题】:Python cp regex: copy an unknown dirPython cp 正则表达式:复制未知目录
【发布时间】:2014-05-24 01:10:15
【问题描述】:

目前在我拥有的程序中,我使用:

os.system('cp /run/user/1000/gvfs/*/store_00010001/DCIM/100ND610/* /home/$USER/Pictures/$(date +%F)/')

但我想使用 shutil.copy 为我进行复制。我有一个问题。在 Bash 中,我可以有一个具有正则表达式/通配符的路径,例如 *?,例如:/run/user/1000/gvfs/*/store_000?0001/,但是如何在 python 中为路径执行此操作?

我正在使用 Python 3.3

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:

    当您期望只有一个匹配项时,以下是使用glob 的简洁方法:

    import glob
    
    unknown_dir = "/run/user/1000/gvfs/gphoto*/"
    matches = glob.glob(unknown_dir)
    
    if len(matches) == 0:
        raise Exception('No matches')
    
    if len(matches) > 1:
        raise Exception('Too many matches')
    
    known_dir = matches[0]
    

    如果您期望零个或多个匹配项,您可以简单地遍历匹配项列表并依次处理每个匹配项:

    import glob
    
    unknown_dir = "/run/user/1000/gvfs/gphoto*/"
    for match in glob.glob(unknown_dir):
        # use match
    

    【讨论】:

      【解决方案2】:

      @eryksun 通过推荐 glob 回答了我的问题。对于未来关注这个问题的人,我是这样使用它的:

      import os
      import glob
      
      unkown_dir = "/run/user/1000/gvfs/gphoto*/"
      known_dir = str(glob.glob(unkown_dir)).strip("[]'")
      

      我需要将路径作为字符串,因此我使用 str() 和 strip()。

      我现在可以使用 shutil.copy。谢谢@eryksun!

      【讨论】:

      • 对列表进行字符串化然后去掉多余的字符不是一个好习惯。如果没有匹配项,它将给你一个空字符串,如果它碰巧匹配多个东西,它会给你一个空字符串。我用更安全的代码添加了答案。
      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多