一个python Path.rglob模式,用于匹配目录中不在node_modules文件夹内的所有package.json文件

0 投票
1 回答
26 浏览
提问于 2025-04-12 03:48

我正在处理一个非常大的单一代码库(monorepo),我想写一个脚本,从所有的 package.json 文件中获取一些信息,但我不想获取那些在 node_modules 文件夹里的 package.json 文件。我尝试了很多方法,除了在递归遍历整个目录后用正则表达式过滤这些文件,包括 node_modules 文件夹。我知道这样做是可行的,但我希望能在搜索之前就过滤掉这些目录,这样可以提高性能。这个单一代码库的结构大致是这样的:

root/
    node_modules/
    apps/
        someApp/
            node_modules/
        someApp2/
            node_modules/
    packages/
        somePackage1/
            node_modules/
        somePackage2/
            node_modules/
        somePackage3/
            node_modules/
        ...

任何帮助都将非常感谢!谢谢。

1 个回答

1

我会遍历整个文件夹结构,跳过所有的 node_modules 文件夹。

这样做的效率会比去找所有的 package.json 文件,然后再根据路径筛选要高得多。

from os import walk

w = walk("/path/to/your/repo")
for(dir_path, dir_names, file_names) in w:
  if dir_path.endswith('node_modules'):
    continue
  for file in file_names:
    if file == 'package.json':
        yield os.path.join(dir_path, file)

撰写回答