Eri*_*ric 4 python recursion os.walk
我使用的是os.walk用followlinks=True,但我打了一个地方,一个符号链接指向它自己的目录,从而导致一个无限循环.在这种情况下的罪魁祸首是/usr/bin/X11列出如下的列表:
lrwxrwxrwx 1 root root 1 Apr 24 2015 X11 -> .
Run Code Online (Sandbox Code Playgroud)
有没有办法避免链接到任何一个.或..我认为会导致类似问题的链接?我想我可以检查一下,os.readlink然后与当前路径进行比较.还有其他解决方案吗?
如果要避免递归,则无法避免存储所访问的所有目录集.readlink但是,您不需要使用,只能存储inode.这完全避免了路径规范化的问题.
import os
dirs = set()
for dirpath, dirnames, filenames in os.walk('.', followlinks=True):
st = os.stat(dirpath)
scandirs = []
for dirname in dirnames:
st = os.stat(os.path.join(dirpath, dirname))
dirkey = st.st_dev, st.st_ino
if dirkey not in dirs:
dirs.add(dirkey)
scandirs.append(dirname)
dirnames[:] = scandirs
print(dirpath)
Run Code Online (Sandbox Code Playgroud)