问题描述
我按照以下顺序尝试执行以下操作:
使用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))
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
所以,从你的root开始,获取第一级的所有内容,然后查找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)
2楼
注意 : os.walk
文档说:
不要在walk()的恢复之间更改当前工作目录。 walk()从不更改当前目录,并假定其调用者也不会
所以你应该在walk
循环中避免使用os.chdir("/home/RawData2/")
。
你可以通过使用topdown=True
和清除dirs
轻松地让walk
不要递归:
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