Рубрики
Без рубрики

Модуль Shutil в Python

Эй! В этом уроке мы узнаем о функциях, присутствующих в модуле shutil Python. Итак, давайте начнем.

Автор оригинала: Pankaj Kumar.

Эй! В этом уроке мы узнаем о функциях, присутствующих в модуле shutil Python. Итак, давайте начнем.

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

Как скопировать файлы с помощью модуля shutil?

В модуле shutil доступны различные методы копирования содержимого одного файла в другой файл.

1. shutil.copyfileobj(src,dst)

Предположим, мы хотим скопировать содержимое файла data.txt кому data1.txt , мы можем использовать следующий фрагмент кода:

import shutil

f=open('data.txt','r')
f1=open('data1.txt','w')

# Syntax: shutil.copyfileobj(src,dst)
shutil.copyfileobj(f,f1)

f.close()
f1.close()

2. shutil.copy(src,dst)

Другой способ копирования данных из одного файла в другой может быть без создания объекта file. Здесь мы передаем относительный путь к нашим файлам.

import shutil
#shutil.copy(src.dst)
shutil.copy('data.txt','data1.txt')

3. shutil.copy2(src,dst)

функции copy (src,dst) и copy2(src,dst) почти одинаковы, но copy2(src,dst) также копирует метаданные исходного файла.

Метаданные включают информацию о том, когда файл был создан, доступен или изменен.

import shutil
#shutil.copy2(src,dst)
shutil.copy2('data.txt','data1.txt')

4. shutil.copyfile(src,dst)

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

import shutil
import os

path='D:\DSCracker\DS Cracker\Python'
print("Before copying file:") 
print(os.listdir(path)) 

shutil.copyfile('data.txt','Python/data3.txt')

print("After copying file:") 
print(os.listdir(path))

Выход:

Before copying file:
['hey.py']
After copying file:
['data3.txt', 'hey.py']

5. shutil.move(src,dst)

Предположим, мы хотим удалить файл из одного места и переместить его в другое место. Вот, давайте двигаться shutil.py из источника в другое место:

import shutil
import os

path='D:\DSCracker\DS Cracker'
print("Source folder:") 
print(os.listdir(path))

path1='D:\DSCracker\DS Cracker\Python'
shutil.move('shutil.py','Python')

print("After moving file shutil.py to destination folder, destination contains:") 
print(os.listdir(path1))

Выход:

Source folder:
['cs', 'data.txt', 'Python', 'ReverseArray', 'ReverseArray.cpp', 'shutil.py']
After moving file shutill.py to destination folder, destination contains:
['data1.txt', 'data3.txt', 'hey.py', 'nsawk.py', 'shutil.py']

6. shutil.copytree(src,dst)

Если мы хотим скопировать полную папку, содержащую все ее файлы, в новое место, мы можем использовать функцию copytree(src,dst ).

Он рекурсивно копирует все дерево каталогов с корнем в src в каталог с именем dst и возвращает каталог назначения.

Давайте скопируем папку Python в папку Новая папка .

Примечание: Мы должны создать новую папку внутри вашей целевой папки, так как функция не позволяет копировать содержимое в уже существующую папку.

Итак, здесь мы создали папку python 1 внутри папки Новая папка .

import os
import shutil

path='D:\DSCracker\DS Cracker\Python'
print("Source folder:") 
print(os.listdir(path))

shutil.copytree('Python','NewPython/python1')

path1='D:\DSCracker\DS Cracker\NewPython\python1'
print("Destination folder:")
print(os.listdir(path1))

Выход:

Source folder:
['data1.txt', 'data3.txt', 'hey.py', 'nsawk.py', 'shutill.py']
Destination folder:
['data1.txt', 'data3.txt', 'hey.py', 'nsawk.py', 'shutill.py']

Как удалить/удалить файлы с помощью модуля shutil?

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

Используя shutil.rmtree() , мы можем удалить любую папку,файл или каталог. Давайте удалим папку Python .

import os
import shutil

path='D:\DSCracker\DS Cracker'
print("Before deleting:") 
print(os.listdir(path))

shutil.rmtree('Python')
print("After deleting:") 
print(os.listdir(path))

Выход:

Before deleting:
['cs', 'data.txt', 'NewPython', 'program.py', 'Python', 'ReverseArray', 'ReverseArray.cpp']

After deleting:
['cs', 'data.txt', 'NewPython', 'program.py', 'ReverseArray', 'ReverseArray.cpp']

Как скопировать биты разрешений из одного файла в другой?

Копирование файла-это одна часть. Что делать, если вы просто хотите скопировать те же разрешения файла во все другие файлы? Давайте научимся делать именно это, используя модуль shutil здесь.

1. shutil.copymode(src,dst)

Этот метод копирует биты разрешений из src в dst. Давайте скопируем биты разрешений из каталога Python в каталог Python 1 .

import shutil
import os
src= 'D:\\DSCracker\\DS Cracker\\Python'
dest='D:\\DSCracker\\DS Cracker\\Python1'

print("Before using shutil.copymode(), Permission bits of destination:")
print(oct(os.stat(dest).st_mode)[-3:])

shutil.copymode(src, dest) 
print("After using shutil.copymode(), Permission bit of destination:")
print(oct(os.stat(dest).st_mode)[-3:])

Выход:

Before using shutil.copymode(), Permission bits of source:
677
After using shutil.copymode(), Permission bit of destination:
777

2. shutil.copystat(src,dst)

shutil.copystat(src.dst) копирует биты разрешений вместе с метаданными.

import shutil
import os
import time 

src= 'D:\\DSCracker\\DS Cracker\\Python'
dest='D:\\DSCracker\\DS Cracker\\Python1'

print("Before using shutil.copystat():")
print("Permission bits:",oct(os.stat(src).st_mode)[-3:])
print("Last modification time:", time.ctime(os.stat(src).st_mtime)) 

print("Modification time:",time.ctime(os.stat(src).st_mtime))

shutil.copystat(src, dest) 

print("After using shutil.copystat():")
print("Permission bits:",oct(os.stat(dest).st_mode)[-3:])
print("Last modification time:", time.ctime(os.stat(dest).st_mtime)) 
print("Modification time:",time.ctime(os.stat(dest).st_mtime))

Выход:

Before using shutil.copystat():
Permission bits: 777
Last modification time: Mon Dec  7 02:20:37 2020
Modification time: Mon Dec  7 02:20:37 2020

After using shutil.copystat():
Permission bits: 777
Last modification time: Mon Dec  7 03:43:47 2020
Modification time: Mon Dec  7 03:43:47 2020

Другие функции в модуле shutil

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

1. shutil.disk_usage(путь)

функция shutil.disk_usage(path) возвращает статистику использования диска по заданным именам путей в виде кортежа с атрибутами total , который представляет собой общий объем памяти, used , который является используемым пространством и free , который является свободным пространством в байтах.

import shutil
import os

path = 'D:\\DSCracker\\DS Cracker\\NewPython\\python1'

statistics=shutil.disk_usage(path)

print(statistics)

Выход:

usage(total=1000203087872, used=9557639168, free=990645448704)

2. шутил.который()

шутил.функция which() возвращает путь к исполняемому приложению, которое запустилось бы, если бы была вызвана данная команда cmd.

import shutil
import os

cmd='Python'

locate = shutil.which(cmd) 

print(locate)

Выход:

C:\Users\AskPython\AppData\Local\Microsoft\WindowsApps\Python.EXE

Вывод

В этом уроке мы рассмотрели, как мы можем копировать, удалять и работать с другими операциями над файлами и папками с помощью модуля shutil в python. Надеюсь, вам всем понравилось. Оставайтесь с нами!

Рекомендации

shutil-Официальные документы по операциям с файлами высокого уровня