голосование
PHP
Javascript
BASH
Firebird
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 можно осмотреть директорию. Если вы не знакомы с модулем os, то предлагаю посетить страницу модуль os Python.


#текущая директория
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']
'''
просмотры: 746, уровень: лёгкий уровень, рейтинг: 0, дата: 2017-09-22 12:24:13
проголосовать:

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






поиск
сайты друзей
банеры
Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://trainingweb.ru/redirect/well_web_vps_kvm Аренда VPS KVM в Европе Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://www.2domains.ru домен RU домен RU всего за 99 рублей
http://ping-admin.ru/index_5659.html мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP