【发布时间】:2010-10-09 07:56:29
【问题描述】:
在 Unix 中,所有磁盘都作为路径暴露在主文件系统中,因此 os.walk('/') 会遍历,例如,/media/cdrom 以及主硬盘,这对于某些应用程序来说是不可取的。
如何获得留在单个设备上的os.walk?
相关:
【问题讨论】:
在 Unix 中,所有磁盘都作为路径暴露在主文件系统中,因此 os.walk('/') 会遍历,例如,/media/cdrom 以及主硬盘,这对于某些应用程序来说是不可取的。
如何获得留在单个设备上的os.walk?
相关:
【问题讨论】:
os.walk() 无法判断(据我所知)它正在浏览不同的驱动器。您需要自己检查。
尝试使用os.stat(),或检查os.walk() 中的根变量是否不是/media
【讨论】:
我认为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 有助于构建您的解决方案。
*感谢 cmets 正确过滤 dirs。
【讨论】:
来自os.walk docs:
当 topdown 为真时,调用者可以 就地修改目录名列表 (也许使用 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))]
...
【讨论】: