在Unix系统中,所有磁盘都在主文件系统中作为路径公开,因此
如何获取仅停留在单个设备上的
相关链接:
os.walk('/')
将遍历例如/media/cdrom
以及主硬盘,但这对于某些应用程序是不理想的。如何获取仅停留在单个设备上的
os.walk
?相关链接:
os.walk('/')
将遍历例如/media/cdrom
以及主硬盘,但这对于某些应用程序是不理想的。os.walk
?来自os.walk
文档:
当topdown为True时,调用者可以原地修改dirnames列表 (可能使用del或切片分配),并且walk()仅会递归到其名称仍在dirnames中的子目录中; 这可用于修剪搜索
因此,像这样做应该可以:
for root, dirnames, filenames in os.walk(...):
dirnames[:] = [
dir for dir in dirnames
if not os.path.ismount(os.path.join(root, dir))]
...
dev0 = os.stat(startpath).st_dev
),并过滤为dirnames[:] = [d for d in dirnames if os.stat(os.path.join(root,d)).st_dev == dev0]
。 - Justin Winokurimport 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)
您可能会发现这个答案对于构建您的解决方案很有帮助。
*感谢有关正确过滤dirs
的评论。
dev0 = os.stat(startpath).st_dev
),并过滤为dirs[:] = [d for d in dirs if os.stat(os.path.join(root,d)).st_dev == dev0]
。 - Justin Winokuros.walk()
无法判断(据我所知)它是否正在浏览不同的驱动器。您需要自行检查。
尝试使用 os.stat()
,或检查来自 os.walk()
的根变量是否不是 /media
。