【问题标题】:Recursive glob only working on some folders递归全局仅适用于某些文件夹
【发布时间】:2020-05-11 06:32:10
【问题描述】:

我正在搜索文件夹的层次结构:

files = glob(os.path.join(fileroot,somefolder,'**/*.npy'),recursive=True)

它适用于某些文件夹而不适用于其他文件夹。我也尝试过其他方法:

from pathlib import Path

for file_path in Path(os.path.join(fileroot,somefolder)).glob('**/*.npy'):
    print(file_path) 

已尝试废弃“npy”以查看是否在没有扩展名的情况下发现它并且没有运气。我错过了什么?

我尝试将包含 npy 文件的文件夹移到一个目录上,这使得它们可以找到..所以我对递归参数的看法很糟糕。

使用上面的递归 glob,我可以找到 2 个文件夹深的文件(即 fileroot/somefolder/folder1/folder2/*npy),但不能再找到(fileroot/somefolder/folder1/folder2/folder3/*npy)。

我还注意到,将 recursive 设置为 False 时,我得到了相同的结果,因此似乎由于某种原因,recursive 命令被忽略了

【问题讨论】:

  • 递归 glob.glob 似乎在我的系统上运行良好。如果您可以更新您的问题以显示可重现的示例,那就太棒了(例如,“当我的文件像这样组织时,它不起作用......”)。
  • 我稍微更新了问题
  • 通配符为*.npy 找不到*npy 文件。
  • 原来是文件路径太长的问题,缩短某些文件夹名称会使递归搜索工作......烦人

标签: python recursion search directory glob


【解决方案1】:

不确定我是否真的理解这个问题,但这会从根文件夹“test”获取文件夹和子文件夹中的文件名。

from os import walk

path = './test'
my_files = []
for (dirpath, dirnames, filenames) in walk(path):
    my_files.extend(filenames)

【讨论】:

  • 模拟glob 我相信你需要使用fnmatch.fnmatch() 过滤结果。
猜你喜欢
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 2017-07-20
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多