我尝试按以下顺序执行以下操作:
使用os.walk()
关闭每个目录
每个目录都有subfolders
,但我只对第一个subfolder
感兴趣。所以目录看起来像:
/home/RawData/SubFolder1/SubFolder2
例如。我希望在RawData2中,让文件夹停留在SubFolder1级别。
问题是,似乎os.walk()
遍历了RawData
个文件夹中的所有内容,我不确定如何让它停止。
以下是我到目前为止的情况 - 我已尝试过将变量dirs替换为root或文件的其他组合,但这似乎并没有让我得到我想要的东西。
import os
for root, dirs, files in os.walk("/home/RawData"):
os.chdir("/home/RawData2/")
make_path("/home/RawData2/"+str(dirs))
答案 0 :(得分:1)
我建议你改用glob。
正如glob上的帮助描述:
glob(pathname)
Return a list of paths matching a pathname pattern.
The pattern may contain simple shell-style wildcards a la
fnmatch. However, unlike fnmatch, filenames starting with a
dot are special cases that are not matched by '*' and '?'
patterns.
因此,您的模式是每个第一级目录,我认为将是这样的:
/root_path/*/sub_folder1/sub_folder2
所以,你从你的根开始,在第一级获得所有内容,然后寻找sub_folder1/sub_folder2
。我认为有效。
把它们放在一起:
from glob import glob
dirs = glob('/root_path/*/sub_folder1/sub_folder2')
# Then iterate for each path
for i in dirs:
print(i)
答案 1 :(得分:1)
小心:os.walk
的文档说:
不要在walk()的恢复之间更改当前工作目录。 walk()从不更改当前目录,并假定其调用者不是
所以你应该避免os.chdir("/home/RawData2/")
循环中的walk
。
您可以使用walk
并清除topdown=True
轻松提问dirs
不要递归:
for root, dirs, files in os.walk("/home/RawData", True):
for rep in dirs:
make_path(os.join("/home/RawData2/", rep )
# add processing here
del dirs[] # tell walk not to recurse in any sub directory