shutil.copy не работает после os.makedirs - PullRequest
1 голос
/ 23 февраля 2020

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

import shutil
import datetime
import os
import time
def backup():
    # set the update interval
    while True:
        backup_interval = input("Please enter the backup interval in seconds: ") # 300
        try:
            valid_time = int(backup_interval) // 60
            print("Backup time set to:", valid_time, "minutes!")
            break
        except ValueError:
            print("This time is not valid, please enter a correct time in seconds: ")
            print(">>> 60 seconds = 1 minute, 3600 seconds = 60 minutes.")

    backup_file = input(r"Please enter the path for the file to backup: ") # D:\Python\BackupDB\test.db"
    dest_dir = input(r"Please enter the destination path: ") # D:\Python\BackupDB\
    folder_name = input(r"Please name your backup folder: ") # BD_Backup
    now = str(datetime.datetime.now())[:19]
    now = now.replace(":", "_")
    # backup_file = backup_file.replace(backup_file, backup_file + str(now) + ".db")
    # thats why I got the FileNotFoundError
    final_destination = os.path.join(dest_dir, folder_name)
    if not os.path.exists(final_destination):
        os.makedirs(final_destination)

    print("hello world")
    shutil.copy(backup_file, final_destination)

Первый вопрос: как заменить имя после я скопировал файл в папку назначения, чтобы получить что-то вроде этого test.db -> test_2020-02-23 08_36_22.db как здесь:

source_dir = r"D:\Python\BackupDB\test.db"
destination_dir = r"D:\Python\BackupDB\BD_Backup\test_" + str(now) + ".db"
shutil.copy(source_dir, destination_dir)

вывод:

test_2020-02-23 08_36_22.db

что я делаю не так здесь? и как скопировать файл 5 раз и через некоторое время (backup_interval) удалить первый и переместить последние 4 вверх и создать новый, чтобы у меня было всего 5 копий этого файла?

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Я изменил ваш код, как вам нужно,

        backup_file = input(r"Please enter the path for the file to backup: ") # D:\Python\BackupDB\test.db"
        dest_dir = input(r"Please enter the destination path: ") # D:\Python\BackupDB\
        folder_name = input(r"Please name your backup folder: ") # BD_Backup
        old_file_name=backup_file.split("/")[-1]
        now = str(datetime.datetime.now())[:19]
        now = now.replace(":", "_")
        new_file_name = old_file_name.split(".")[0]+"_" + str(now) + ".db"
        final_destination = os.path.join(dest_dir, folder_name)
        if not os.path.exists(final_destination):
            os.mkdir(final_destination)
        new_file="/"+new_file_name
        shutil.copy(backup_file, final_destination)
        os.rename(final_destination+'/'+old_file_name,final_destination+new_file)

Мне понравилось, после копирования файла я просто переименовал его

0 голосов
/ 23 февраля 2020

Ранее я сталкивался с подобной проблемой, и причина была в том, что создание каталога еще не было завершено до попытки доступа к нему. Простой сон перед копированием должен подтвердить это.

...