Как синхронизировать две папки с помощью скрипта Python

В настоящее время я работаю над проектом, в котором синхронизирую две папки. Мои папки в следующем примере называются объявлениями Папка_1 в качестве источника и Папка_2 в качестве места назначения. Я хочу сделать следующее.

  1. Если файлы, находящиеся в папке_1, отсутствуют в папке_2, скопируйте файлы из папки_1 в папку_2 и Наоборот.
  2. Если я переименую какой-либо файл в любой папке, он будет обновлен в другой папке вместо копирования нового файла с обновленным именем.
  3. если я удалю какой-либо файл из любой папки, он также должен быть удален из другой папки.

Я выполнил половину части первого пункта, в которой я могу копировать файлы из папки_1 в папку_2. Часть отправки, где я мог бы копировать файлы из папки_2 в папку_1, все еще остается.

Ниже приведен мой код

import os, shutil
path = 'C:/Users/saqibshakeel035/Desktop/Folder_1/'
copyto = 'C:/Users/saqibshakeel035/Desktop/Folder_2/'

files =os.listdir(path)
files.sort()
for f in files:
        src = path+f
        dst = copyto+f
        try:
                if os.stat(src).st_mtime < os.stat(dst).st_mtime:
                        continue
        except OSError:
                        pass
                        shutil.copy(src,dst)#this is the case when our file in destination doesn't exist
                               =
print('Files copied from'+ path +'to' + copyto+ '!')

Что я могу изменить или сделать, чтобы полностью синхронизировать обе папки? Заранее спасибо :)

Как узнать, отсутствует ли файл (случай 1) или файл был удален (случай 3)?

xmojmr 14.02.2019 12:26

Так в чем проблема?

Alderven 14.02.2019 12:51

@Alderven проблема в том, что я не понимаю, как можно использовать .os для удаления файлов из места назначения, если я удалю файл из исходной папки ..??

Saqib Shakeel 14.02.2019 14:04

@xmojmr мой код {files =os.listdir(path)} перечисляет все файлы, присутствующие в каталоге. Скажи Папка один. «Попробовать» проверяет, что файл, сохраненный в папке «Назначение», имеет самое последнее время, и если это правда, он переходит к «кроме», где говорится, что нужно скопировать файл в папку назначения.

Saqib Shakeel 14.02.2019 14:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
11
4
13 993
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

(Не тот же подход, что и у вас, но он выполняет работу, как и ожидалось от вашего запроса)

Простой код с использованием dirsync:

from dirsync import sync
source_path = '/Give/Source/Folder/Here'
target_path = '/Give/Target/Folder/Here'

sync(source_path, target_path, 'sync') #for syncing one way
sync(target_path, source_path, 'sync') #for syncing the opposite way

Дополнительные параметры см. в документации здесь: дирсинк — PyPI

Вы можете, конечно, добавить обработку исключений вручную, если хотите.

Можем ли мы использовать dirsync для синхронизации двух папок, лежащих на двух разных хост-компьютерах?

Shy 06.02.2020 06:18

@Shy да, может. Просто вам нужно убедиться, что вы правильно указали пути. На Mac, подключенном к локальному серверу, /Volumes/SomeRemoteFolder/Subfolder работает нормально после подключения к серверу через Go -> Connect to Server ( Command + K).

MPatel1 09.02.2020 18:26

Это просто величественно! извините за комментарий, но, наконец, нашел что-то полезное, что можно сделать в Windows, когда у вас нет прав администратора.

Traxidus Wolf 16.04.2020 04:47

Из pypi.org/project/dirsync кажется, что есть двусторонний вариант, чтобы сделать трюк одной командой: --twoway

Romain Jouin 10.05.2020 12:05

Большое спасибо за этот удивительный обмен, М. Патель.

HassanSh__3571619 29.09.2020 18:48

Можно ли реализовать индикатор выполнения или что-то, чтобы показать ход процесса?

Junix 17.02.2021 06:33

Другие вопросы по теме