我试图写一个简单的Python脚本,将复制索引。在所有子目录(少数例外)中将TPL转换为index.html。
我在获取子目录列表时陷入了困境。
我试图写一个简单的Python脚本,将复制索引。在所有子目录(少数例外)中将TPL转换为index.html。
我在获取子目录列表时陷入了困境。
当前回答
使用pathlib的一行代码:
list_subfolders_with_paths = [p for p in pathlib.Path(path).iterdir() if p.is_dir()]
其他回答
操作系统。在这种情况下,走路是你的朋友。
直接从文档中:
Walk()通过自顶向下或自底向上遍历目录树来生成目录树中的文件名。对于根在目录顶部的树中的每个目录(包括top本身),它会生成一个3元组(dirpath、dirnames、filename)。
import os
获取目录下的(全路径)直接子目录:
def SubDirPath (d):
return filter(os.path.isdir, [os.path.join(d,f) for f in os.listdir(d)])
获取最新(latest)子目录:
def LatestDirectory (d):
return max(SubDirPath(d), key=os.path.getmtime)
我必须提到path.py库,我经常使用它。
获取直接子目录变得如此简单:
my_dir.dirs ()
完整的工作示例是:
from path import Path
my_directory = Path("path/to/my/directory")
subdirs = my_directory.dirs()
注意:my_directory仍然可以作为字符串操作,因为Path是string的子类,但提供了一堆有用的方法来操作路径
def get_folders_in_directories_recursively(directory, index=0):
folder_list = list()
parent_directory = directory
for path, subdirs, _ in os.walk(directory):
if not index:
for sdirs in subdirs:
folder_path = "{}/{}".format(path, sdirs)
folder_list.append(folder_path)
elif path[len(parent_directory):].count('/') + 1 == index:
for sdirs in subdirs:
folder_path = "{}/{}".format(path, sdirs)
folder_list.append(folder_path)
return folder_list
下面的函数可以被调用为:
get_folders_in_directores_recurrecursive (directory, index=1) ->给出了第一层的文件夹列表
get_folders_in_directores_recurrecursive (directory) ->给出所有子文件夹
这个方法很好地一次性完成了这一切。
from glob import glob
subd = [s.rstrip("/") for s in glob(parent_dir+"*/")]