我有两个任务:
我以Dewey十进制分类的格式设置了我的数字图书馆,所以我有一个3 +深层次的10 + 100 + 1000个文件夹,目录有时会更深一些。这个库结构包含我想要在目录中列出的“书籍”(可能是一个可搜索的文本文档)。如果我可以在每个“书”旁边的单独列中查看父目录名称,那么最好(尽管不是绝对必要)。
问题是我图书馆中的一些“图书”是独立作为项目的文件夹。当我设计这个系统时,我提前计划好,以便我的库中的每个项目都包含[]
中包含作者姓名的标签,所以我的想法是我会尝试执行所有这些的递归列表,但当它遇到名称,目录或文件中[
的任何内容时结束每次递归。
我怎么能这样做?我知道一点Python(最初我用来创建库结构),因为这是在外部硬盘驱动器上,我可以在Windows或Linux中执行此操作。我的粗略想法是执行某种递归列表,它将检查[
的每个目录或文件的名称,如果是,则停止并添加它(以及父目录的名称)到一个列表。我不知道从哪里开始。
答案 0 :(得分:2)
答案基于this其中
list comprehension无法删除,因为我们必须"modify the subdirList in-place"。相反,我们会在列表的深层副本上使用enumerate
进行删除,以便在原始列表修改后删除后不会跳过计数器i
。
我没有尝试过,所以不要相信这100%。
# Import the os module, for the os.walk function
import os
# Set the directory you want to start from
rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
print('Found directory: %s' % dirName)
for fname in fileList:
print('\t%s' % fname)
for i, elem in reversed(list(enumerate(subdirList[:]))):
if "[" in elem:
del subdirList[i]