Python glob 模块无法进行多重选择?

标签 python linux glob

在 Linux 中,我的文件夹如下所示:

src
├── app
│   ├── app.component.css
│   ├── app.component.html
│   ├── app.component.spec.ts
│   ├── app.component.ts
│   ├── app.module.ts
│   ├── app-routing.module.ts
│   ├── components
│   │   ├── catalog-main
│   │   │   ├── catalog-main.component.css
│   │   │   ├── catalog-main.component.html
│   │   │   ├── catalog-main.component.spec.ts
│   │   │   └── catalog-main.component.ts
│   │   ├── catalog-sidebar
│   │   │   ├── catalog-sidebar.component.css
│   │   │   ├── catalog-sidebar.component.html
│   │   │   ├── catalog-sidebar.component.spec.ts
│   │   │   └── catalog-sidebar.component.ts
│   │   └── top-bar
│   │       ├── top-bar.component.css
│   │       ├── top-bar.component_handy.css
│   │       ├── top-bar.component_handy.html
│   │       ├── top-bar.component.html
│   │       ├── top-bar.component.spec.ts
│   │       └── top-bar.component.ts
│   ├── icons-provider.module.ts
│   ├── pages
│   │   ├── login
│   │   │   ├── login.component.css
│   │   │   ├── login.component.html
│   │   │   ├── login.component.spec.ts
│   │   │   ├── login.component.ts
│   │   │   ├── login.module.ts
│   │   │   └── login-routing.module.ts
│   │   ├── monitor
│   │   │   ├── monitor.component.css
│   │   │   ├── monitor.component.html
│   │   │   ├── monitor.component.spec.ts
│   │   │   ├── monitor.component.ts
│   │   │   ├── monitor.module.ts
│   │   │   └── monitor-routing.module.ts
│   │   ├── monitor2
│   │   │   └── monitor2.module.ts
│   │   └── welcome
│   │       ├── welcome.component.css
│   │       ├── welcome.component.html
│   │       ├── welcome.component.ts
│   │       ├── welcome.module.ts
│   │       └── welcome-routing.module.ts
│   ├── reducers
│   │   └── index.ts
│   └── store
│       ├── catalog.actions.ts
│       ├── catalog.reducer.ts
│       └── userinfo.ts
├── assets
├── environments
│   ├── environment.prod.ts
│   └── environment.ts
├── favicon.ico
├── index.html
├── main.ts
├── polyfills.ts
├── styles.css
├── test.ts
└── theme.less

我使用这个命令输出29个文件:ll src/**/*.ts | wc -l
我使用此命令输出 32 个文件:ll src/{**,}/*.ts | wc -l,新文件是 src/main.ts、src/test.ts、src/polyfills.ts,它们直接位于 src 文件夹中

但是在python3中,
我使用 glob.glob("src/**/*.ts") 输出所有 32 个文件,
我使用 glob.glob("src/{**,}/*.ts") 输出所有 0 个文件

那么,标准 glob 语法是什么?

最佳答案

which is standard glob syntax?

因为您标记了linux,所以我假设您使用bash。 Bash 有 nostandard (即它不在 posix 中)与 globbing 无关的扩展 brace expansion .

:

ll src/{**,}/*.ts | wc -l

首先扩展为:

ll src/**/*.ts src/*.ts | wc -l

在进行大括号扩展时通过 bash。然后下一步会发生全局扩展。 Python 在解析 glob 参数时不会进行任何 shell 扩展,因此 Python 会搜索名为 { 并以 ,} 结尾的文件/目录(按字面意思理解)作为字符 - 因为没有找到,所以计数为 0。

所以你不是在比较通配符,而是在比较通配符与 shell 扩展和仅通配符。您可以将命令与禁用大括号扩展的 bash 进行比较 set +B 或使用另一个不带大括号扩展的 shell,例如 busyboxs。

关于Python glob 模块无法进行多重选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597975/

相关文章:

python - 在 Python 中从 .xlsx 文件中读取图表

C/C++时钟时序问题

linux - 使用命令或 bash 脚本清理环境?

c++ - 如何在 QML 中播放视频?

python - 打印包含相同子文件夹的所有文件夹中哪个子文件夹为空?

c++ - 在 C++/C 中通配,在 Windows 上

python - 递归重命名文件以使文件名与其路径串联

python - 获取字典中相似值的键的最有效方法

java - sonar-project.properties 中的 Glob

python - <object> 不是 JSON 可序列化的 django