加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

清理文件夹列表,仅保留每个文件夹组中的顶级文件夹

发布时间:2020-12-17 17:37:19 所属栏目:Python 来源:网络整理
导读:我刚刚开始编写Python编程,希望一些经验丰富的人可以给我 有关如何优化以下代码的提示. 我想要做的是浏览文件夹列表,使新列表仅包含每组文件夹中的顶级文件夹. 我一直在努力并编写下面的代码来完成工作,但是当使用包含数千个文件夹的列表时,伸缩性会非常差.

我刚刚开始编写Python编程,希望一些经验丰富的人可以给我
有关如何优化以下代码的提示.

我想要做的是浏览文件夹列表,使新列表仅包含每组文件夹中的顶级文件夹.

我一直在努力并编写下面的代码来完成工作,但是当使用包含数千个文件夹的列表时,伸缩性会非常差.

欢迎任何喜欢如何优化此例程的想法.

folderlist = [  "c:tempdata1122 AA",
                "c:tempdata1122 AADiv",
                "c:tempdata1122 AADivEtc",
                "c:tempdata1122 AADivEtc2",
                "c:tempserver1div2244_BB",
                "c:tempserver1div2244_BBpp",
                "c:tempserver1div2244_BBderdedd",
                "c:tempserver1div2244_BBdefwe23d23ded",
                "c:temp123456789-BB",
                "c:temp123456789-BBpp",
                "c:temp123456789-BBderdee32d",
                "c:tempdata123456789-BBdedve_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:tempdata1122 AA
c:tempserver1div2244_BB
c:temp123456789-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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读