假定以下目录结构:
\dir1
\dir2
\dir3
data.txt
more.txt
如果当前工作目录为\dir1
,请运行以下代码:
from pathlib import Path
print(list(Path('.').glob('**/*.txt')))
..将给出此结果(在Windows上):
[WindowsPath('dir2/more.txt'), WindowsPath('dir2/dir3/data.txt')]
这是预期的。但是,改为运行:
print(list(Path('dir2').glob('**/*.txt')))
..给出完全相同的结果。我本来期望:
[WindowsPath('more.txt'), WindowsPath('dir3/data.txt')]
显然,glob()
对象的Path
方法返回相对于当前工作目录的结果,仅将glob限制为对象中的路径。
是否有一种更简单的方法(至少使用Path
或pathlib
)来获得预期的结果,而不仅仅是将工作目录更改为该文件夹,运行glob并返回到原始工作目录?
这个结果对我来说似乎是一个错误。毕竟,当这两个命令具有有用且明显不同的含义时,让它们返回相同的结果有什么意义?
# expecting a result relative and restricted to dir2
print(list(Path('dir2').glob('**/*.txt')))
# expecting a result relative to ., restricted to dir2
print(list(Path('.').glob('dir2/**/*.txt')))