использование pathlib для копирования файлов из подкаталогов в другие подкаталоги на основе файла.имя

Каталог 1 содержит подпапки с информацией о студентах, каждая подпапка названа по следующему соглашению.

LASTNAME, FIRSTNAME (STUDENTNUMBER)

В каталоге 2 есть 6 подпапок, содержащих .xlsx листа оценок учащихся. Каждый из этих файлов Excel назван в соответствии со следующим соглашением.

LASTNAME, FIRSTNAME (STUDENTNUMBER) marking sheet.xlsx

Я хотел бы использовать pathlib, чтобы взять имена подпапок в каталоге 1 и найти соответствующий оценочный лист в подпапках в каталоге 2.

Например:

import pathlib as pl

dir1 = pl.WindowsPath(r'C:\Users\username\directory_1')
dir2 = pl.WindowsPath(r'C:\Users\username\directory_2')

for (subfolder, file) in zip(dir1.iterdir(), dir2.rglob("*.xlsx")):
    if str.lower(subfolder.name) is in str.lower(file.name): #I run up against a wall here
        copy file into subfolder
        print(f'{file.name} copied to {subfolder.name}')

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


person KevOMalley743    schedule 29.06.2021    source источник


Ответы (1)


Это не проверено, но я думаю, что вы хотите создать потенциальное имя файла из подпапок в каталоге 1, используя его для поиска в каталоге 2, а затем перемещая файлы, которые вы найдете.

from pathlib import Path
from shutil import copy

dir1 = Path("C:\Users\username\directory_1")
dir2 = Path("C:\Users\username\directory_2")

for folder in dir1.iterdir():
    # We're only interested in folders
    if not folder.is_dir():
        continue

    target_file = f"{folder.name} marking sheet.xlsx"
    for file in dir2.rglob(target_file):
        # copy(file, dest)

Я не уверен, куда вы хотите скопировать файлы, но вы можете установить переменную dest для каждой подпапки dir1 или результата rglob. Еще одна вещь, которую следует отметить, вы можете найти несколько файлов с целевым именем в разных каталогах, поэтому я бы предостерег вас от копирования их всех в одно и то же место!

person Alex    schedule 29.06.2021
comment
Большое спасибо, я вижу, что вы здесь делаете. dest это папка в dir1. Итак, я хочу взять имя папки в каталоге dir1 и использовать его, чтобы найти файл .xlsx в каталоге dir2 и скопировать этот файл в подпапку каталога dir1, которая имеет такое же имя. Я могу поиграть с тем, что вы написали, и опубликовать обратно. Спасибо миллион за ваше время @Alex - person KevOMalley743; 29.06.2021
comment
Ах, да, это, безусловно, выполнимо. Если хотите, я могу расширить свой ответ тем, что я бы сделал, но я не хочу мешать вам найти ответ самостоятельно! Иногда все, что нужно, это указать в правильном направлении - person Alex; 29.06.2021
comment
Я на пару часов над другой задачей, но через несколько часов выложу свою версию, еще раз спасибо за помощь. - person KevOMalley743; 30.06.2021