gpt4 book ai didi

python - 清理文件夹列表,只保留每组文件夹中的顶级文件夹

转载 作者:行者123 更新时间:2023-11-28 17:00:50 24 4
gpt4 key购买 nike

我刚刚开始编程 Python,希望你们中的一些有经验的人可以给我有关如何优化以下代码的提示。

我想做的是遍历一个文件夹列表,创建一个新列表,只包含每组文件夹中的顶级文件夹。

我努力编写了下面的代码,它完成了工作,但在使用包含数千个文件夹的列表时扩展得非常厉害。

欢迎提供有关如何优化此例程的任何想法。

folderlist = [  "c:\\temp\\data\\1122 AA",\
"c:\\temp\\data\\1122 AA\\Div",\
"c:\\temp\\data\\1122 AA\\Div\\Etc",\
"c:\\temp\\data\\1122 AA\\Div\\Etc2",\
"c:\\temp\\server1\\div\\2244_BB",\
"c:\\temp\\server1\\div\\2244_BB\\pp",\
"c:\\temp\\server1\\div\\2244_BB\\der\\dedd",\
"c:\\temp\\server1\\div\\2244_BB\\defwe23d\\23ded",\
"c:\\temp\\123456789-BB",\
"c:\\temp\\123456789-BB\\pp",\
"c:\\temp\\123456789-BB\\der\\dee32d",\
"c:\\temp\\data\\123456789-BB\\ded\\ve_23"]

l2 = folderlist.copy()
ind = []
indexes_to_be_deleted = []

for el in l2:
for idx, x in enumerate(l2):
if el in x:
ind.append(idx)

counts = Counter(ind)

for l, count in counts.most_common():
if count > 1:
indexes_to_be_deleted.append(l)

for i in sorted(indexes_to_be_deleted, reverse=True):
del folderlist[i]

Output:
c:\\temp\\data\\1122 AA\\
c:\\temp\\server1\\div\\2244_BB\\
c:\\temp\\123456789-BB\\

输出符合预期,只有每组文件夹中的顶级文件夹。但是,我希望你们中的一些人知道如何使例程更快。

最佳答案

我建议添加到新列表而不是删除项目:

topFolders = [] 
for name in folderlist: # sorted(folderlist) if they are not already in order
if topFolders and name.startswith(topFolders[-1]+"\\"): continue
topFolders.append(name)

如有必要,您可以将其分配给原始列表

folderlist = topFolders

关于python - 清理文件夹列表,只保留每组文件夹中的顶级文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com