qq_36826233 2019-11-21 13:17 采纳率: 50%
浏览 2877
已采纳

python 路径匹配中的 *和**通配符用法

通俗易懂一点
为什么

PurePath("a/b.py").match("*.py") True 运行结果是True,单个"星号"成功匹配了a/b 。 不是说单个星号不能匹配斜杠的吗

PurePath("/a/b/c.py").match("a/**/*.py") False 运行结果是False,两个"星号"没有成功匹配 b/c。。 不是说两个星号可以匹配多级目录吗

  • 写回答

1条回答 默认 最新

  • 家在田塍 2019-11-21 16:46
    关注
    对于单个星号,不能匹配斜杠,你这个理解是对的,相当于只能匹配路径里最深的子目录文件。
    也就是match从右向左进行匹配,只要PurePath中的路径与match里的特征一致就返回True。
    如你说的第一个例子:
    PurePath("a/b.py").match("*.py") ,
    这里的“*”匹配的是b,而非a/b,你可以通过这个验证:
    PurePath("c/a/b.py").match("c/*.py")  ,  运行为False。
    PurePath("c/a/b.py").match("a/*.py"),  运行为True。
    
    对于两个星号,它指的是当前目录及所有子目录,所以来看你这个例子:
    PurePath("/a/b/c.py").match("a/**/*.py"),
    此时当前路径是"/a/b/c.py",那么match中的**与* 进行匹配时,
    按照从右向左规则,* 应该匹配c, **应该匹配的是/a/b,但是你的match
    中前面还有个a/,所以返回了False,如果改成这样,就返回了True
    PurePath("/a/b/c.py").match("**/*.py")。
    你可以多写些例子,找找语感,good luck。
    
    

    https://docs.python.org/3.6/library/pathlib.html?highlight=path#module-pathlib
    https://docs.python.org/3.6/library/glob.html?highlight=glob#module-glob
    这个是相关文档,关于match方法以及glob通配符这个模块内容,可以仔细阅读一下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘