Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python glob模块不能使用多重选择?_Python_Linux_Glob - Fatal编程技术网

Python glob模块不能使用多重选择?

Python glob模块不能使用多重选择?,python,linux,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 │ │ │ ├──

在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个文件:
llsrc/***.ts | wc-l

我使用这个命令输出32个文件:
llsrc/{**,}/*.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语法呢。这两种语法都不允许

**是一种扩展,由zsh发明并首次普及。Bash和其他一些人复制了它,通常做了一些稍微不兼容的事情。Bash和Python都复制了它,但在与其他globbing语法交互时选择了稍微不同的行为

这是有道理的:毕竟,虽然glob(3)是一个POSIX函数,精确地指定并按照指定的方式实现,但zsh只是一个角色模型,可以随意偏离。我们必须偏离,因为

哪种是标准的glob语法

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

委员会:

首先扩展到:

ll src/**/*.ts src/*.ts | wc -l
在执行大括号扩展时使用bash。接下来是全球化扩张。Python在解析glob参数时不进行任何shell扩展,因此Python搜索名为
{
并以
}
作为字符结尾的文件/目录,因为它没有找到任何文件/目录,所以计数为0

所以你不是在比较globbing,你是在比较globbing和shell扩展,而只是比较globbing。您可以将命令与禁用大括号扩展的bash进行比较
set+B
,或者使用另一个没有大括号扩展的shell,如busybox

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