Как сохранить список строк в подсписках согласно указанному c выражению? - PullRequest
2 голосов
/ 08 февраля 2020

Я делаю скрипт для сохранения пути чтения в подсписке. Предположим, у меня есть 400 файловых путей, сохраненных в списке, каждый путь имеет определенный c синтаксис Ci_whaterver.csv, тогда в моем списке путей есть что-то вроде этого:

pathlist=[C1_01.csv,C1_02.csv,...,Cn_01.csv,Cn_02.csv] 

Я бы хотел, чтобы в конце концов pathlistf упорядочено или отсортировано в этой ситуации:

pathlistf=[[C1_01.csv,C1_02.csv,...],[C2_01.csv,C2_02.csv,...],...,[Cn_01.csv,Cn_02.csv,...]]

У меня нет идеи переупорядочить путь к этому пути.

Привет еще раз, у меня возникла эта проблема: я хотел бы спросить что-то очень похожее на предыдущий случай, предположим, у меня есть следующий путь: path=[case1_Qxxx_cap1_whatever.csv,case1_Qxxx_cap1_whatever2.csv,case1_Qxxx_cap1_whatever3.csv,....,case1_Qxxx_cap2_whatever.csv,case1_Qxxx_cap2_whatever2.csv,case1_Qxxx_cap2_whatever3.csv,case2_Qxxx_cap1_whatever.csv,case2_Qxxx_cap1_whatever2.csv,...,case2_Qxxx_cap2_whatever.csv,case2_Qxxx_cap2_whatever2.csv]

Я хотел бы иметь это :

pathf=[[[case1_Qxxx_cap1_whatever.csv,case1_Qxxx_cap1_whatever2.csv,...],[case1_Qxxx_cap2_whatever.csv,Qxxx_cap2_whatever2.csv,...]],[[case2_Qxxx_cap1_whatever.csv,case2_Qxxx_cap1_whatever2.csv,...],[case2_Qxxx_cap2_whatever.csv,case2_Qxxx_cap2_whatever2.csv,...]]]

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

Если pathlist предварительно отсортировано, вы можете использовать следующий код на основе itertools.groupby.

from itertools import groupby
pathlist=['Cn_01.csv', 'C1_02.csv', 'C9_01.csv', 'C9_02.csv', 'Ca_01.csv', 'C9_03.csv', 'Ca_02.csv', 'C1_01.csv', 'Cn_02.csv']
pathlist.sort()
groupedfilenames = (list(g) for _, g in groupby(pathlist, key=lambda a: a[:2]))
print(list(groupedfilenames))

Вывод:

[['C1_01.csv', 'C1_02.csv'], ['C9_01.csv', 'C9_02.csv', 'C9_03.csv'], ['Ca_01.csv', 'Ca_02.csv'], ['Cn_01.csv', 'Cn_02.csv']]
0 голосов
/ 08 февраля 2020

Одним из способов будет создание словаря и использование части Ci в качестве ключа, и списки имен файлов, начинающиеся с Ci, будут значением. Например, возьмите pathlist = ['C1_01.csv','C1_02.csv', 'C2_01.csv' , 'C3_01.csv', 'C2_02.csv'], тогда мы создадим словарь, в котором будет храниться

{'C1': ['C1_01.csv', 'C1_02.csv'], 'C2': ['C2_01.csv', 'C2_02.csv'], 'C3': ['C3_01.csv']}

Вот код:

pathlist = ['C1_01.csv','C1_02.csv', 'C2_01.csv' , 'C3_01.csv', 'C2_02.csv']
d = {}
for path in pathlist:
    if path[:2] not in d:
        d[path[:2]] = [path]
    else:
        d[path[:2]].append(path)
pathlistf = []
for key in d:
    pathlistf.append(d[key])
print(pathlistf)
# Output: [['C1_01.csv', 'C1_02.csv'], ['C3_01.csv'], ['C2_01.csv', 'C2_02.csv']]

Надеюсь, это решит проблему. Не стесняйтесь задавать любые сомнения.

...