我将 os.walk
与 followlinks=True
一起使用,但我遇到了一个符号链接(symbolic link)指向它自己的目录的地方,导致无限循环。这种情况下的罪魁祸首是 /usr/bin/X11
列表如下:
lrwxrwxrwx 1 root root 1 Apr 24 2015 X11 -> .
有什么方法可以避免跟踪到 .
或 ..
的链接,我认为这会导致类似的问题?我想我可以使用 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)
关于python - 使用 os.walk 避免无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36977259/