Для перемещения одного или нескольких файлов можно использовать предложение with move
Перемещение файлов из одного каталога в другой может показаться не таким уж большим делом, но иногда это очень помогает при манипулировании файлами.
В этом руководстве будут представлены некоторые способы перемещения файлов из одного каталога в другой в Python.
Используйте модуль pathlib для перемещения файлов в Python
Модуль pathlib в Python - это стандартный модуль, используемый для предоставления объекта, используемого для управления различными файлами и словарями. Основной объект для работы с файлами называется Путь.
Примеры
В следующем примере файл перемещается.
Сопутствующая статья - Python File
Сопутствующая статья - Python Dictionary
report this ad
Я пытаюсь восстановить резервную копию базы данных, но получаю ошибку:
Сбой восстановления для сервера "ASIF-VAIO". (Microsoft.SqlServer.SmoExtended)
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
System.Data.SqlClient.SqlError: Файл 'C:\Program Files\Microsoft SQL Сервер \MSSQL10_50.MSSQLSERVER\MSSQL\DATA\uwa.mdf 'испрашивается "Aston_Fresh_log" (2) и "Aston_Fresh" (1). Предложение WITH MOVE может быть используется для перемещения одного или нескольких файлов. (Microsoft.SqlServer.Smo)
Используйте функции os.rename() или os.replace() для перемещения файлов в Python
Часто пользователю необходимо подключиться к основной системе через Python. В этом случае в дело вступает модуль os . Модуль os в основном действует как посредник между пользователем и операционной системой компьютера, чтобы пользователь мог правильно подключиться к операционной системе.
Одна из функций этого модуля - модуль rename() , используемый для перемещения файлов из одного места в другое. Эта функция перемещает файлы, переименовывая имя каталога этих файлов.
Еще одна функция этого модуля - функция replace() . Эта функция помогает переименовать файл или текущий каталог. Местом назначения должен быть файл, а не каталог. Поэтому, если местом назначения является файл, он будет заменен без каких-либо ошибок.
В заключение, когда конечный пункт назначения файла находится на том же диске, что и исходный, используется функция rename() . А если нужно изменить место назначения файла, то нужно использовать replace() .
Здесь мы также следуем той же процедуре, сначала определяя пути к начальному и конечному каталогам. Затем мы используем функцию listdir() , чтобы получить список всех файлов в текущем каталоге. После этого мы используем цикл for , чтобы перезаписать место назначения этих файлов.
Комментарии
Этот метод работает в разных томах диска, и он не создает исключение, если источник и назначение совпадают.
Обратите внимание, что при попытке заменить файл путем перемещения файла с тем же именем в этот каталог IOException возникает исключение. Чтобы избежать этой проблемы, сделайте следующее:
Аргументы sourceFileName могут destFileName включать относительные или абсолютные сведения о пути. Относительные сведения о пути интерпретируются относительно текущего рабочего каталога. Сведения о получении текущего рабочего каталога см. в разделе GetCurrentDirectory.
Перемещение файла между томами диска эквивалентно копированию файла и его удалению из источника, если копирование выполнено успешно.
Если вы попытаетесь переместить файл между томами диска и используется этот файл, файл копируется в место назначения, но он не удаляется из источника.
Список распространенных задач ввода-вывода см. в разделе "Общие задачи ввода-вывода".
Команда MOVE используется для перемещения или переименования файлов и каталогов. Формат командной строки:
Перемещение одного или более файлов:
MOVE [/Y | /-Y] [диск:][путь]имя_файла1[. ] назначение
MOVE [/Y | /-Y] [диск:][путь]имя_папки новое_имя_папки
Параметры командной строки:
[диск:][путь]имя_файла1 - Определяет местоположение файла или файлов, которые необходимо переместить.
Назначение - Определяет новое местоположение файла. Назначение может состоять из буквы диска (с последующим двоеточием), имени папки или их комбинации. При перемещении только одного файла, можно указать и его новое имя, если хотите выполнить его одновременное переименование при перемещении.
[диск:][путь]имя_папки - Определяет папку, которую необходимо переименовать.
новое_имя_папки - Определяет новое имя папки.
/Y - Перезаписывать существующие файлы назначения без предупреждения.
/-Y - Предупреждать при перезаписи существующего файла назначения.
Ключ /Y может присутствовать в значении переменной среды окружения COPYCMD . Оно может перекрываться ключом /-Y в командной строке. По умолчанию используется предупреждение о перезаписи, если только команда MOVE не выполняется как часть пакетного файла.
move /? - отобразить подсказку по использованию команды.
move folder1 folder2 - переименовать папку с именем folder1 в folder2 в текущем каталоге.
move E:\test\folder1 E:\test\folder2 - переименование с указанием абсолютных путей.
move C:\file1.txt D:\ - переместить файл file1.txt с диска C: на диск D:
move c:\test\file1.txt D:\folder2\file2.txt - перенести файл file1.txt из каталога test диска C: в каталог folder2 диска D: под именем file2.txt
move C:\Folder1\*.* D:\Folder2\ - переместить все файлы из каталога Folder1 диска C: в каталог Folder2 диска D:
Реализация в ОС Windows данной команды не позволяет перемещать папки на другие логические диски.
move C:\folder1 C:\folder2\folder3\folder1 - переместить каталог folder1 из корня диска C: в подкаталог \folder2\folder3
При перемещении папки в несуществующий каталог он не будет создан автоматически и команда завершится ошибкой. Команда move не работает с файлами, имеющими атрибуты "скрытый " и "системный".
Используйте функцию shutil.move() для перемещения файлов в Python
Модуль shutil - это модуль Python, который помогает в высокоуровневых манипуляциях с файлами или набором файлов. Этот модуль используется в таких операциях, как копирование файла откуда-то или удаление файла.
Для перемещения файла из одного каталога в другой с помощью модуля shutil вызывается shutil.move() .
Здесь из модуля os используется функция listdir() , которая используется для получения полного списка всех файлов, находящихся в каталоге. Мы используем цикл for для перемещения файла и отмечаем, что функция move() модуля shutil используется для переноса файлов из одного каталога в другой.
ОТВЕТЫ
Ответ 1
При восстановлении вы должны быть уверены
- выберите новое имя базы данных, которое еще не существует (если вы не хотите перезаписывать эту ранее существующую базу данных)
- вы отмечаете опцию Overwrite на вкладке Options и определяете допустимый и новые имена файлов для файлов .mdf и .ldf , чтобы вы случайно не перезаписывали другой в вашей системе:
Ответ 2
Это сработало для меня: давая другое имя для каждого файла MDF и LDF в разделе script.
Первоначально предложенный Альберто Морилло
Ответ 3
У этой публикации есть отличные ответы, но я не считаю, что мое решение было рассмотрено здесь, или я не понял ответ/комментарий.
Однако, когда я столкнулся с этой ошибкой, я восстанавливал базу данных с двумя индексами (Primary и Index). Проблема заключалась в том, что при восстановлении он создал два файла .ndf, по одному для каждого индекса, но назвал их одинаковыми.
Итак, у меня было два восстанавливаемых файла "Восстановить как" до "D:\MSSQLDATA\DatabaseName.ndf.
Чтобы преодолеть это, мне пришлось изменить одно из имен файлов, поэтому, например, я изменил
с уникальными именами файлов исправил это для меня.
Ответ 4
Я знаю это давно со времени последнего ответа, но мне пришлось искать в google решение для этой проблемы. Для меня это было написано сценарием восстановления (изменение имени файла не выполняло трюк) и ручное изменение имен файлов в коде
Ответ 5
Если у вас есть эта проблема, и она не указана выше, попробуйте в разделе "Параметры восстановления > Файлы" установите флажок "Переместить все файлы в папку".
Я пытаюсь восстановить резервную копию базы данных, но получаю ошибку:
Не удалось восстановить сервер ASIF-VAIO. (Microsoft.SqlServer.SmoExtended)
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
System.Data.SqlClient.SqlError: файл 'C: \ Program Files \ Microsoft SQL Сервер \ MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ uwa.mdf 'заявлен «Aston_Fresh_log» (2) и «Aston_Fresh» (1). Предложение WITH MOVE может быть используется для перемещения одного или нескольких файлов. (Microsoft.SqlServer.Smo)
При восстановлении нужно обязательно
- выберите новое имя базы данных, которая еще не существует (если вы не хотите перезаписать уже существующую базу данных)
- вы устанавливаете флажок Overwrite на вкладке Options и определяете действительные и новые имена файлов для файлов .mdf и .ldf , чтобы вы не случайно не перезаписать другую базу данных в вашей системе:
В моем случае в моей папке \DATA уже были файлы .mdf и .ldf , поэтому мне пришлось создать два новых файла:
Затем в диспетчере SQL вам нужно выбрать эти новые файлы при восстановлении базы данных.
Если у вас есть эта проблема, и это не так, попробуйте в разделе «Параметры восстановления»> «Файлы» установите флажок «Переместить все файлы в папку».
Это сработало для меня: дать разные имена каждому файлу MDF и LDF в разделе сценария.
Первоначально предложено Альберто Морильо
В этом посте есть отличные ответы, но я не верю, что мое решение было описано здесь, или я не понял ответ / комментарий.
Однако, когда я столкнулся с этой ошибкой, я восстанавливал базу данных с двумя индексами (первичный и индексный). Проблема заключалась в том, что при восстановлении он создал два файла .ndf, по одному для каждого индекса, но назвал их одинаково.
Таким образом, у меня было два файла «Восстановить как», которые восстанавливались в «D: \ MSSQLDATA \ DatabaseName.ndf».
Чтобы преодолеть это, мне пришлось изменить одно из имен файлов, поэтому, например, я изменил
Наличие уникальных имен файлов исправило это для меня.
Я знаю, что это давно прошло с момента последнего ответа, но мне пришлось искать в Google решение этой проблемы. Что это сделало для меня, так это сценарий восстановления (изменение имени файла не помогло) и ручное изменение имен файлов в коде
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Move(String, String)
Перемещает заданный файл в новое местоположение и разрешает переименование файла.
Параметры
Имя перемещаемого файла. Может содержать относительный или абсолютный путь.
Новый путь к файлу и его имя.
Исключения
destFileName уже существует.
Произошла ошибка ввода-вывода, например при копировании файла между томами диска.
Не удалось найти sourceFileName .
Параметр sourceFileName или destFileName имеет значение null .
У вызывающего объекта отсутствует необходимое разрешение.
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
В sourceFileName или destFileName указан недопустимый путь (например, он ведет на несопоставленный диск).
Параметр sourceFileName или destFileName имеет недопустимый формат.
Перегрузки
Перемещает заданный файл в новое местоположение и разрешает переименование файла.
Перемещает указанный файл в новое расположение, предоставляя параметры для указания нового имени файла и перезаписи конечного файла, если он уже существует.
Читайте также: