首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据目录名和文件名对路径列表进行分组

根据目录名和文件名对路径列表进行分组
EN

Stack Overflow用户
提问于 2022-11-29 15:10:15
回答 1查看 29关注 0票数 1

我想根据目录名和文件名对路径进行排序。它们由第一个不同的文件夹("TENT1“和"TENT2")分隔。注意,有些文件位于"Job1“和"Job2”文件夹中,但有些文件也需要排序。谢谢!

代码语言:javascript
复制
paths = [
    '/var/lib/conc/states/TENT1/Job1/metr-ok_2022_11_28',
    '/var/lib/conc/states/TENT1/Job1/metr-ok_2022_11_29',
    '/var/lib/conc/states/TENT1/Job1/weig-ok_2022_11_28',
    '/var/lib/conc/states/TENT1/Job1/weig-ok_2022_11_29',
    '/var/lib/conc/states/TENT1/down-ok_2022_11_27',
    '/var/lib/conc/states/TENT1/down-ok_2022_11_28',
    '/var/lib/conc/states/TENT1/serv-ok_2022_11_28',
    '/var/lib/conc/states/TENT1/serv-ok_2022_11_29',
    '/var/lib/conc/states/TENT2/Job2/metr-ok_2022_11_28',
    '/var/lib/conc/states/TENT2/Job2/metr-ok_2022_11_29',
    '/var/lib/conc/states/TENT2/Job2/weig-ok_2022_11_28',
    '/var/lib/conc/states/TENT2/Job2/weig-ok_2022_11_29',
    '/var/lib/conc/states/TENT2/down-ok_2022_11_27',
    '/var/lib/conc/states/TENT2/down-ok_2022_11_28',
    '/var/lib/conc/states/TENT2/serv-ok_2022_11_28',
    '/var/lib/conc/states/TENT2/serv-ok_2022_11_29',
]

但这正是我想要的:

代码语言:javascript
复制
paths = [
    [
        [
            '/var/lib/conc/states/TENT1/Job1/metr-ok_2022_11_28',
            '/var/lib/conc/states/TENT1/Job1/metr-ok_2022_11_29'
        ],

        [
            '/var/lib/conc/states/TENT1/Job1/weig-ok_2022_11_28',
            '/var/lib/conc/states/TENT1/Job1/weig-ok_2022_11_29'
        ],

        [
            '/var/lib/conc/states/TENT1/down-ok_2022_11_27',
            '/var/lib/conc/states/TENT1/down-ok_2022_11_28',
        ],

        [
            '/var/lib/conc/states/TENT1/serv-ok_2022_11_28',
            '/var/lib/conc/states/TENT1/serv-ok_2022_11_29'
        ],

    ],
    [
        [
            '/var/lib/conc/states/TENT2/Job2/metr-ok_2022_11_28',
            '/var/lib/conc/states/TENT2/Job2/metr-ok_2022_11_29'
        ],
        [
            '/var/lib/conc/states/TENT2/Job2/weig-ok_2022_11_28',
            '/var/lib/conc/states/TENT2/Job2/weig-ok_2022_11_29'
        ],
        [
            '/var/lib/conc/states/TENT2/down-ok_2022_11_27',
            '/var/lib/conc/states/TENT2/down-ok_2022_11_28',
        ],
        [
            '/var/lib/conc/states/TENT2/serv-ok_2022_11_28',
            '/var/lib/conc/states/TENT2/serv-ok_2022_11_29',
        ],
    ]
]

这是我的密码:

代码语言:javascript
复制
from itertools import groupby
from os.path import dirname
sorted_by_file = [list(g) for _,g in groupby(paths, dirname)]

我正在挣扎如何排序,一旦这些文件是按文件夹名称排序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-29 19:42:57

与用于分组的dirname函数不同,您必须创建自己的函数,该函数如下所示

代码语言:javascript
复制
import os.path

def grouper(path):
    d, f = os.path.split(path)
    f = f.split('-')[0]
    return d, f

它返回一个包含目录和文件名相关部分的元组。

它可以与您在代码中已经使用的方式相同:

代码语言:javascript
复制
from itertools import groupby
sorted_by_file = [list(g) for _,g in groupby(paths, grouper)]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74616163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档