我正在研究一个python(3.6)项目,其中需要克隆一个GitHub存储库,该存储库的目录结构为:
|parent_DIR
|--sub_DIR
|file1....
|file2....
|--sub_DIR2
|file1...
现在我需要获取以下信息:
1. Parent directory name
2. How many subdirectories are
3. names of subdirectories
这是我克隆GitHub存储库的方式:
from views.py:
# clone the github repo
tempdir = tempfile.mkdtemp()
saved_unmask = os.umask(0o077)
out_dir = os.path.join(tempdir)
Repo.clone_from(data['repo_url'], out_dir)
答案 0 :(得分:0)
要遍历目录,请使用os.scandir(path='parent_directory')
。这将返回os.DirEntry
个对象的迭代器,父目录中的每个文件或目录一个。 dir_entry.name
将为您提供文件/子目录名称,并且对象is_dir()
可以告诉您该条目是否是目录。对于每个子目录,请再次调用相同的函数,依次对子目录的每个子目录进行调用(如果存在)。
要获取目录中的目录和文件数,请为迭代器返回的每个对象增加一个计数器(请注意,这将包括.
和..
)
答案 1 :(得分:0)
可能的话,您可以使用os.walk(dir)(下面的代码示例)。
import os
import tempfile
tempdir = tempfile.mkdtemp()
saved_unmask = os.umask(0o077)
out_dir = os.path.join(tempdir)
# Create a few dirs.
os.makedirs(out_dir + "/parent_DIR")
os.makedirs(out_dir + "/parent_DIR/sub_DIR")
os.makedirs(out_dir + "/parent_DIR/sub_DIR2")
os.makedirs(out_dir + "/parent_DIR/sub_DIR3")
os.makedirs(out_dir + "/parent_DIR/sub_DIR3/subsub_DIR")
i = 0
for _, subdir_list, _ in os.walk(out_dir):
if i == 0:
parent_dir_name = subdir_list[0]
else:
break # Do not go deeper.
i += 1
print("The parent dir name is: %s" % parent_dir_name)
print("The number of subdirs is: %s" % len(subdir_list))
print("The list of subdirs is: %s" % subdir_list)
我的示例输出:
The parent dir name is: parent_DIR
The number of subdirs is: 3
The list of subdirs is: ['sub_DIR3', 'sub_DIR', 'sub_DIR2']