【问题标题】:python glob apply wildcard to search only in certain directoriespython glob应用通配符仅在某些目录中搜索
【发布时间】:2018-08-09 21:46:49
【问题描述】:

如何将通配符应用于 glob 以仅搜索特定目录中的文件?

例如我有这些文件夹 AABC、AADE 和存档。我只想运行 glob 来获取 AABC 和 AADE 中的所有 json 文件,而不是归档文件夹中的所有 json 文件。

我尝试了不同的变体:

json_files = glob.glob("**.json", recursive=True)

如:

json_files = glob.glob("AA**/**.json", recursive=True)

但它似乎不起作用。感谢您的帮助。

【问题讨论】:

  • archive 文件夹是什么意思?
  • @vishes_shell 一个名为“archive”的文件夹
  • 我觉得很傻,glob.glob("AA**/**.json", recursive=True) 工作得很好,我在错误的目录中。但@Vlad 的回答更好

标签: python python-3.x glob


【解决方案1】:

这是您的解决方案 - glob.glob('aa*/*.json'))

这是一个测试:

vladimir@vladimir-hp /tmp $ mkdir aab
vladimir@vladimir-hp /tmp $ mkdir aac
vladimir@vladimir-hp /tmp $ mkdir a
vladimir@vladimir-hp /tmp $ touch aab/1.json
vladimir@vladimir-hp /tmp $ touch aac/2.json
vladimir@vladimir-hp /tmp $ touch a/3.json
vladimir@vladimir-hp /tmp $ python3 -c "import glob; print(glob.glob('aa*/*.json'))"
>>> ['aac/2.json', 'aab/1.json']

【讨论】:

  • 感谢@Vlad,这行得通。这就像 linux 风格的通配符
【解决方案2】:

如果您只有两个要搜索的目录 您可以在每个目录上分别使用 glob 并将结果连接起来:

json_files = glob.glob("AABC/*.json", recursive=True) + glob.glob("AADE/*.json", recursive=True)

【讨论】:

  • 感谢@taras,这暂时可以使用,但我相信将来我会有更多文件夹
  • @kouichi,因此您可以使用 for 循环遍历目录列表并聚合数据。
猜你喜欢
  • 2012-04-03
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多