Как объединить / добавить PDF-файлы в соответствии с именем файла? - PullRequest
0 голосов
/ 17 октября 2019

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

Сейчас код ниже будет знать, каксделать два файла. Но не знаю, когда правильно прекратить добавление одного отдела и начать новый отдел. Я получил два файла прямо сейчас. Тот, который имеет всю анестезию (и выглядит хорошо) и останавливается. И один файл дерматологии, но он содержит файлы анестезии и дерм.

Есть ли способ перезапустить начальную точку добавления в моих циклах. Я извиняюсь, я не очень хорош в списках / циклах:

import os
from PyPDF2 import PdfFileMerger


department_list =['Anesthesiology','Dermatology']
file_dict = {}
for subdir, dirs, files in os.walk("C:/Users/username/Documents/Tests"):
    for file in files:
        filepath = subdir + os.sep + file
        for dept in department_list:
            if filepath.__contains__(dept):
                file_dict[file] = filepath
                merger = PdfFileMerger(strict=False)
                for k, v in file_dict.items():
                    print(k, v)
                    merger.append(v)
                    merger.write(dept + ' combined_result.pdf')

1 Ответ

1 голос
/ 17 октября 2019

Вы просматриваете файлы и проверяете, принадлежат ли они в отделе.

Однако вы создаете один file_dict, который сохраняет все файлы, принадлежащие другому отделы, а не только файлы для одного отдела.

Вам необходимо вывести слияние из цикла, который присваивает файлы отделам. Более элегантное решение будет сопоставлять файлы уже по отделам изначально с помощью glob.glob () и избегать двойных циклов, но это также будет означать некоторую перезапись.

Самый простой способ изменить существующий код (но его можно улучшить):

file_dict={ dept:{} for dept in department_list } # seed file_dict with departments
for subdir, dirs, files in os.walk("C:/Users/username/Documents/Tests"):
    for file in files:
        filepath = os.path.join(subdir,file) # note changed check
        for dept in department_list: 
            if dept in filepath: #note changed from __contains__. Usually you needn't call __ funcs in your code
                file_dict[dept][file] = filepath

for dept in department_list:
    merger = PdfFileMerger(strict=False)
    for k, v in file_dict[dept].items():
       print(k, v)
       merger.append(v)
    merger.write(dept + ' combined_result.pdf')
...