我想找到具有两种不同扩展名的两种类型的文件:.jl和.jsonlines. 我用
from pathlib import Path
p1 = Path("/path/to/dir").joinpath().glob("*.jl")
p2 = Path("/path/to/dir").joinpath().glob("*.jsonlines")
Run Code Online (Sandbox Code Playgroud)
但我想要p1和p2作为一个变量而不是两个。我应该合并p1,并p2在首位?还有其他方法可以连接 glob 的模式吗?
les*_*lie 13
from pathlib import Path
exts = [".jl", ".jsonlines"]
mainpath = "/path/to/dir"
# Same directory
files = [p for p in Path(mainpath).iterdir() if p.suffix in exts]
# Recursive
files = [p for p in Path(mainpath).rglob('*') if p.suffix in exts]
# 'files' will be a generator of Path objects, to unpack into strings:
list(files)
Run Code Online (Sandbox Code Playgroud)
这对我有用:
\nfor f in path.glob("*.[jpeg jpg png]*"):\n ...\nRun Code Online (Sandbox Code Playgroud)\n作为参考fnmatch:
\n\n\n\n[seq] 匹配 seq 中的任意字符
\n
\n\n模式与 fnmatch 相同,但添加了 \xe2\x80\x9c**\xe2\x80\x9d,这意味着 \xe2\x80\x9c 这个目录和所有子目录,递归地\xe2\x80\x9d。
\n
编辑:
\n更好的方法是这样的:
\n*.[jpJP][npNP][egEG]*\nRun Code Online (Sandbox Code Playgroud)\n我不知道正确的 POSIX 兼容方法。前面的方法将匹配“.py”之类的文件,因为括号以任何顺序匹配任何字母。
\n这种方式应该匹配“jpeg”、“JPEG”、“jpg”、“JPG”、“png”和“PNG”。它还匹配“jpegxyz”等格式,因为末尾有“*”,但括号序列使得更难选择其他文件扩展名。
\n尝试这个:
from os.path import join
from glob import glob
files = []
for ext in ('*.jl', '*.jsonlines'):
files.extend(glob(join("path/to/dir", ext)))
print(files)
Run Code Online (Sandbox Code Playgroud)