在Unix中,所有磁盘都作为主文件系统中的路径公开,因此os.walk('/')
将遍历,例如/media/cdrom
以及主硬盘,这对某些应用程序来说是不可取的。 / p>
如何获得保留在单个设备上的os.walk
?
相关:
答案 0 :(得分:15)
来自os.walk
文档:
当topdown为true时,调用者可以 就地修改dirnames列表 (也许使用del或slice 赋值)和walk()只会 递归到其子目录中 姓名保留在名字中;这可以 用于修剪搜索
所以这样的事情应该有效:
for root, dirnames, filenames in os.walk(...):
dirnames[:] = [
dir for dir in dirnames
if not os.path.ismount(os.path.join(root, dir))]
...
答案 1 :(得分:3)
我认为os.path.ismount可能适合您。您的代码可能如下所示:
import os
import os.path
for root, dirs, files in os.walk('/'):
# Handle files.
dirs[:] = filter(lambda dir: not os.path.ismount(os.path.join(root, dir)),
dirs)
您可能还会发现this answer有助于构建解决方案。
*感谢您对正确过滤dirs
的评论。
答案 2 :(得分:1)
os.walk()
无法分辨(据我所知)它正在浏览不同的驱动器。你需要亲自检查一下。
尝试使用os.stat()
,或检查os.walk()
中的根变量是否为/media