Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用os.walk时,是否有方法确定子目录是否与python位于同一文件系统中?_Python_Unix - Fatal编程技术网

使用os.walk时,是否有方法确定子目录是否与python位于同一文件系统中?

使用os.walk时,是否有方法确定子目录是否与python位于同一文件系统中?,python,unix,Python,Unix,我正在编写一个python脚本,它使用os.walk()遍历目录树。我想让它能够跳过装载到不同文件系统的子目录,就像find-xdev那样。在查看os.walk()上的文档时,我没有看到任何参数可以让它自动执行此操作。有什么我可以用来自己过滤的吗?希望能在Linux和Mac OS X上运行?我认为您可以结合使用OS.stat调用和过滤OS.walk给出的目录名来做您想要做的事情。大概是这样的: import os for root, dirs, files in os.walk(someroot

我正在编写一个python脚本,它使用os.walk()遍历目录树。我想让它能够跳过装载到不同文件系统的子目录,就像
find-xdev
那样。在查看os.walk()上的文档时,我没有看到任何参数可以让它自动执行此操作。有什么我可以用来自己过滤的吗?希望能在Linux和Mac OS X上运行?

我认为您可以结合使用
OS.stat
调用和过滤
OS.walk
给出的目录名来做您想要做的事情。大概是这样的:

import os
for root, dirs, files in os.walk(somerootdir) :
    do_processing(root, dirs, files)
    dirs = [i for i in dirs if os.stat(os.path.join(root, i)).st_dev == os.stat(root).st_dev]
这应该通过删除那些没有相同设备的目录来修改要递归到的目录列表


我不知道它将如何在OS X上工作,但在经过一点测试后,它似乎在Linux中工作。

应该使用del或slice分配修改dirs列表。否则,只需将局部变量dirs重新绑定到新列表,而不是更改os.walk使用的dirs列表。