Возвращает список самого большого файла по идентификатору из списка путей к файлам Python - PullRequest
0 голосов
/ 09 июля 2020

Допустим, у меня есть список с путями к файлам в виде строк:

['/#path#/AAA_123444_10D', '/#path#/AAA_123444_11D', '/#path#/BBB_987666_12D', '/#path#/CCC_987666_15D', '/#path#/DDD_123444_18D']

Идентификаторы в каждом имени файла - это 6 цифр di git после первого подчеркивания. Я хочу вернуть список путей к самому большому файлу размер для каждого идентификатора. В этом случае допустим, что файл /#path#/AAA_123444_11D является самым большим из файлов с идентификатором 123444, а файл /#path#/BBB_987666_12D является самым большим на диске из файлов с идентификатором 987666. В этом случае я хотел бы вернуть следующий список :

['/#path#/AAA_123444_11D', '/#path#/BBB_987666_12D']

Список должен содержать только по одному идентификатору каждого идентификатора. Порядок не имеет значения.

1 Ответ

0 голосов
/ 10 июля 2020

Вот что я в итоге сделал:

import os
import ntpath

# file selector
def multipleFileSelector(Title='Choose Files'):
    root = tkinter.Tk()
    root.withdraw()
    filepath = filedialog.askopenfilenames(parent=root,title=Title)
    root.destroy()
    filelist_Path = root.tk.splitlist(filepath)
    return filelist_Path

# checks if ID exists in the list already or not
def idListCheck(comp, lst):
    for path in lst:
        if ntpath.basename(path).split('_')[2] == comp:
            return True
    return False

# Problem really starts here
filelist_Path = list(multipleFileSelector())

sorted_filelist = []
for path in filelist_Path:
    print(ntpath.basename(path).split('_')[2])
    lst = [i for i, e in enumerate(filelist_Path) if ntpath.basename(e).split('_')[2] == ntpath.basename(path).split('_')[2]]
    if lst and not idListCheck(ntpath.basename(path).split('_')[2], sorted_filelist):
        biggest_file = [-1,0] # -1 is arbitrary
        for same_id_index in lst:
            size_of_file = os.path.getsize(filelist_Path[same_id_index])
            if size_of_file > biggest_file[1]:
                biggest_file = [same_id_index, size_of_file]
        sorted_filelist.append(filelist_Path[biggest_file[0]])

print(sorted_filelist)
...