假设我有一个符号链接的子目录,如下所示:
subdir/
folder/
readme.txt
symlink/ => ../hidden/
hidden/
readme.txt
如果我运行以下代码:
>>> from pathlib import Path
>>> list(Path('./subdir/').glob('**/readme.txt'))
我希望结果如下:
subdir/folder/readme.txt
subdir/symlink/readme.txt
但实际结果是:
subdir/folder/readme.txt
我发现这是因为(对于某些未记录的原因)**运算符不遵循符号链接。
有没有办法以实际方式更改此配置?
答案 0 :(得分:1)
pathlib.glob
也不适用于**
和符号链接。我发现了相关问题https://bugs.python.org/issue33428。
作为Python3的替代方案,您可以将glob.glob
与**
和recursive=True
选项一起使用(请参阅详细信息https://docs.python.org/3/library/glob.html)
In [67]: from glob import glob
In [71]: list(glob("./**/readme.txt", recursive=True))
Out[71]:
['./hidden/readme.txt',
'./subdir/folder/readme.txt',
'./subdir/symlink/readme.txt']
In [73]: list(glob("./**/readme.txt", recursive=False))
Out[73]: ['./hidden/readme.txt']
比较:
In [72]: list(Path('.').glob('**/readme.txt'))
Out[72]: [PosixPath('hidden/readme.txt'), PosixPath('subdir/folder/readme.txt')]
答案 1 :(得分:0)
我之前从未使用过<form action="whereYouWillHaveAllThisData.php" method="GET">
<input type="text" name="name" >
<input type="text" name="email" >
</form>
,因此您可以扩展此解决方案以利用其中的一些功能,但我只能使用pathlib
才能使用此功能。
glob
输出:
from glob import glob
list(glob('./subdir/*/readme.txt'))
如果您开始使用具有多个深度子目录的['./subdir/folder/readme.txt', './subdir/symlink/readme.txt']
,那么该hackish解决方案是将包含额外glob
的变体(例如*/
)包括在内任意深度,并连接每个变体的结果。
执行所需操作的更合适的方法是编写具有所需行为的自定义函数(通过符号链接搜索到任意深度),并以您希望的方式处理圆形路径的大小写。有关使用./subdir/*/*/*/readme.txt
执行此操作的提示,请参阅this question(请记得设置os.walk
)。