好的,这就是我想要做的: 我有一个程序,允许通过启动时加载的.py自定义它的菜单。目标是添加一个新的菜单图标,然后打开一个子菜单结构,该子菜单结构遵循预定义路径中的文件夹和文件结构。在这些文件夹中,可以在程序中使用很少的工具/脚本。
我发现了一些递归代码可以完成这项工作,但是 这太复杂了,我想自己做。 这是一个示例文件树的图片: Sample folder structrue
就像创建子菜单'other'一样,对于'other'创建子菜单的'lumapictures'和'pixelfudger','lumapictures'创建频道......依此类推.. 所以稍后子菜单结构应该反映文件夹结构应将子目录中的路径和文件作为项目添加到相应的子菜单中。
以下是我没有智能解决方案的部分:
我需要创建一个变量来存储每个子目录(如果它们存在于此sibdir中的其他子目录中),并且可以以智能方式存储在这些目录中的文件。稍后,我需要使用此变量为每个文件夹(以及其中的文件夹)添加子菜单,如果有.gizmo,则将它们添加到相应的子菜单中作为项目。要添加.gizmo,我需要正确的子菜单(路径树中的文件夹)和完整路径,以便将其添加为项目
我知道os.listdir()
列出了os.isdir
给定文件夹的所有文件夹或所有文件,并通过搜索了解了
os.walk() #sample
# traverse root directory, and list directories as dirs and files as files
for root, dirs, files in os.walk("/mnt/WD4TB/Backups/formultiboot/nuke/gizmos"):
print (root)
print (dirs)
print (files)
returns:
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos
['3d', 'despill', 'edge', 'fx', 'grain', 'key', 'other']
['L_ChannelSolo_v01.gizmo']
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/3d
[]
[]
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/despill
[]
['DespillMadness.gizmo', 'L_Despill_v05.gizmo']
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/edge
[]
[]
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/fx
[]
['expoglow.gizmo']
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/grain
[]
['L_Grain_v05.gizmo']
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/key
[]
[]
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/other
['lumapictures', 'pixelfudger']
[]
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/other/lumapictures
['Channel']
['L_ChannelSolo_v01.gizmo']
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/other/lumapictures/Channel
[]
['L_ChannelSolo_v01.gizmo']
/mnt/WD4TB/Backups/formultiboot/nuke/gizmos/other/pixelfudger
[]
['pixelfudger.py', 'PxF_Bandpass.gizmo', 'PxF_Bandpass.png', 'PxF_ChromaBlur.gizmo', 'PxF_ChromaBlur.png', 'PxF_Distort.gizmo']