簡體   English   中英

我可以在 Python 中使用 glob 匹配組/可選組嗎?

[英]Can I match groups / optional groups using glob in Python?

我希望能夠使用 Python 3.9 中的glob模塊來匹配包含以下文件名的目錄中的文件名:

  • “MM05_awani3_StudentA.py”
  • “MM05_liu127.py”

具體來說,我希望能夠遍歷符合特定模式的目錄中的所有文件。 所以我想像這樣使用 for 循環:

for file in current_path.glob("string"):
    # do something

glob 模式“MM05_submissions/MM05_*[a-z0-9]?(_Student[AZ]).py”似乎根據DigitalOcean 的 glob 測試工具工作,但我沒有在 Python 3.9 中找到任何匹配項

  • DigitalOcean 測試儀上使用的 glob 與 Python 中的不同嗎?
  • 我可以使用圓括號()匹配 Python 中的可選組嗎?
  • 如果不是,我應該使用 RegEx 之類的東西來遍歷與目錄中特定模式匹配的文件嗎?

您不能使用(...)分組,不。 glob()模塊使用fnmatch模塊進行匹配,它支持* , ? , [seq][!seq] ,僅此而已。

但是, fnmatch使用簡單的模式到正則表達式的轉換來測試文件名。 自己用os.scandir()做同樣的事情:

import re
import os

pattern = re.compile("MM05_[a-z0-9]*(_Student[A-Z])?\.py")

for entry in os.scandir("MM05_submissions"):
    if pattern.fullmatch(entry.name):
        # name matched the pattern

如果您需要使用目錄名稱支持任意深度模式,則必須使用os.walk()編寫一些內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM