голосование
PHP
jQuery
Firebird
BASH
HTML
Ресурсы
GIT
SEO
Oracle
Python
Проголосуйте за категорию!
счётчик
Яндекс.Метрика

Как рекурсивно скопировать папку модуль shutil Python

Рассмотрим возможности модуля shutil Python. В можете перемещать уделять папки и файлы. Можно пойти другой дорогой: вызывать sh команды при помощи python. Это довольно сложный путь. В этом модуле довольно просто выполняется рекурсивное копирование файлов. Если у вас операционная система linux, то воспользуйтесь следующим кодом:


mkdir folder1
cd folder1
touch file{1..10}.txt
ls
#вывод:
file10.txt  file1.txt  file2.txt  file3.txt  file4.txt  file5.txt\
file6.txt  file7.txt  file8.txt  file9.txt

Если у вас операционная система виндовс, то вручную создайте папку folder1 и разместите в ней 10 файлов. Теперь рассмотрим функции модуля shutil.

copyfile(<исходный путь>,<путь назначения>) копирует содержимое файла из исходной пути в путь назначения. никакие метаданные не копируются. позволяет скопировать файл из одной директории в другую. Вы можете при копировании изменить название файла. Скопированный файл будет иметь новое имя.


#!/usr/bin/python3
import shutil, os

#копирую файл
shutil.copyfile('./folder1/file1.txt','./folder2/file1.txt', follow_symlinks=True)

copytree(<исходный путь>,<путь назначения>) рекурсивное копирование файлов и папок. Копирование происходит из исходного пути в путь назначения. Тут учитывается вложенность папок. Вся иерархия папок и файлов сохраняется. Я использовал функцию os.getcwd() для определения текущего положения. Благодаря функции os.listdir можно осмотреть директорию.


#текущая директория
cur_dir = os.getcwd()
#копирую дерево
shutil.copytree(cur_dir + '/folder1', cur_dir + '/folder2/')
#осмотр директории
data = os.listdir(cur_dir + '/folder2/')
print(data)
'''
вывод:
['file10.txt', 'file2.txt', 'file9.txt', 'file1.txt', 'file7.txt', 'file5.txt',\
'file8.txt', 'file4.txt', 'file6.txt', 'file3.txt']
'''

shutil.move(<исходный путь>,<путь назначения>) - копирует содержимое файла из исходной пути в путь назначения. В результате происходит копирование файлов. Затем происходит удаление старых файлов (не перемещённых файлов).


#перемещение директории с переименованием папки
cur_dir = os.getcwd()
#копирую дерево
shutil.move(cur_dir + '/folder1', cur_dir + '/folder2/')
#осмотр директории
print(os.listdir(cur_dir))
'''
вывод:
['folder2', '__pycache__', 'copy_dir.py']
'''

shutil.rmtree(<исходный путь>, ignore_errors=False, onerror=None) - выполняет рекурсивное удаление файлов и папок. Используйте осторожно эту функцию. <исходный путь> должен указывать на директорию, а не на символическую ссылку. Если ignore_errors=True, то ошибки, возникающие в результате неудавшегося удаления, будут проигнорированы. Если False (по умолчанию), эти ошибки будут передаваться обработчику onerror, или, если его нет, то возникнет исключение.



#рекурсивное удаление файлов и папок
cur_dir = os.getcwd()
#рекурсивное удаление папок
shutil.rmtree(cur_dir + '/folder2')
print(os.listdir(cur_dir))
'''
вывод:
['__pycache__', 'folder1', 'copy_dir.py']
'''
просмотры: 73, уровень: лёгкий уровень, рейтинг: 0, дата: 2017-09-22 12:24:13
проголосовать:

Комментарии:






поиск
реклама
банеры
домен RU всего за 99 рублей
http://www.2domains.ru домен RU домен RU всего за 99 рублей
http://ping-admin.ru/index_5659.html мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
https://my.colobridge.net/aff.php?aff=047 серверы vps/vds облачный vps/vds сервер colobridge от 9,9 евро в месяц