Я новичок ie и стараюсь сделать офисную работу менее утомительной. В настоящее время у меня есть небольшая программа, которая сортирует и копирует файлы .pdf из папки в несколько папок, в зависимости от того, кому эти файлы нужно отправить позже.
Она отлично работает. Проблема в том, что я постоянно проверяю, справился ли он со своей задачей. Затем я добавил немного, где он считает скопированные файлы, чтобы упростить проверку.
Теперь я пытался выяснить, могу ли я заставить программу сравнивать список файлов в исходной папке со списком файлов из всех других папок назначения, а затем удалите оригиналы, если файлы действительно скопированы. сравните.
Вот мой код:
import os
import shutil
import pathlib
import pprint
dir = ('[path to original folder]')
files = os.listdir(dir)
user_data = [
('Karl H. Preusse', [Path to Karl]),
('Rom', [Path to Rom]),
('Hochschule', [Path to Hochschule]),
('Kiefer', [Path to Kiefer),
('Penny', [Path to Penny),
('Steigenberger', [Path to Steigenberger]),
('Penzkofer', [Path to Penzkofer]),
('Stoffel', [Path to Stoffel]),
('Cavertitzer', [Path to Cavertitzer])
]
for pattern, dest_dir in user_data:
matching_files = [f for f in files if pattern in f]
for filename in matching_files:
full_filename = os.path.join(dir, filename)
if os.path.isfile(full_filename):
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
shutil.copy(full_filename, dest_dir)
pprint.pprint(shutil.copy(full_filename, dest_dir))
stetje_datotek = sum(len(files) for _, _, files in os.walk([Path to directory that holds the copy folders])) #defines files to count
print('Stevilo datotek v mapi Posiljanje je: {}' .format(stetje_datotek)) #Prints out how many files are in the target folders.
Ниже приведены мои попытки автоматизировать работу.
#I commented this function out as I couldn't figure out how to get the data out of it.
#def sub_files(folder):
# relpath = os.path.relpath
# join = os.path.join
# for path, _, files in os.walk([Path to directory that holds the copy folders]):
# relative = relpath(path, [Path to directory that holds the copy folders])
# for file in files:
# yield join(relative, file)
#print(sub_files)
Здесь я решил использовать входные данные для индивидуальной проверки каждой папки :
#print(os.listdir([Path to directory that holds the copy folders]))
#if input() == 'Penzkofer':
#pprint.pprint(os.listdir([Path to Penzkofer folder]))
И здесь я попытался сравнить списки, но получил ошибку TypeError: unhashable type: 'list'
prvotne_datoteke = set(os.listdir(dir))
kopirane_datoteke = set(os.walk([Path to directory that holds the copy folders])
set(prvotne_datoteke).intersection(kopirane_datoteke)
Любая помощь приветствуется. Спасибо.