Сборка словаря из списка с использованием цикла for в Python - PullRequest
0 голосов
/ 03 января 2019

У меня есть несколько файлов формата в каталоге.Я пытаюсь создать список или словарь для группировки похожих форматированных (расширенных) файлов в python, используя цикл for, но почему-то это не работает.

Вот мой пример кода:

extension = ['pdf','xlsx','doc']

file_name_path=[]
file_dict ={}
for i in range(len(extension)):
    for file_name in filelst:
        if os.path.splitext(file_name)[-1] == extension[i]:
            file_name_path.append(file_name)
            file_dict[str(extension[i])]= file_name_path


file_name_path   
file_dict

, где filelst - это список, содержащий все имена файлов, например,

filelst = 
['PD_CFS_PLL_OnMonSummary_2017Q2.xlsx',
 'PD_Detailed_OMR_PLL_Lines_2017Q2.xlsx',
 'PD_Detailed_OMR_PLL_Loans_2017Q2.xlsx',
 'regexp-tip-sheet.pdf',
 'SAS statistical-business-analyst certification .pdf']

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Альтернативный метод для получения словаря с расширениями в качестве ключей

extension = ['.pdf','.xlsx','.doc']
filelist = ['one.pdf','two.pdf','three.doc','four.xlsx'] #just for example
d = dict()
for i in extension:
    d[i] = [j for j in filelist if os.path.splitext(j)[-1].lower()==i]
print(d)

вывод:

{'.doc': ['three.doc'], '.xlsx': ['four.xlsx'], '.pdf': ['one.pdf', 'two.pdf']}

Обратите внимание, что я использовал точки в списке расширений как os.path.splitext список возврата с последним элементом, являющимся'.extension'..lower() используется для того, чтобы сделать это решение без учета регистра, строки в списке extension должны содержать только строчные буквы.

0 голосов
/ 03 января 2019

Вы перезаписываете значение словарей каждый раз, когда виден один и тот же ключ.

Вместо этого используйте список в качестве значения и добавьте.Для этого defaultdict.

из коллекций импорт defaultdict

extension = ['pdf','xlsx','doc']

file_dict = defaultdict(list)

for file_name in filelst:
    ext = os.path.splitext(file_name)[-1].lower()
    if ext in extension:
        file_dict[ext].append(file_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...