Недавно, работая с файлами в Python, я познакомился с модулем Shutil. Этот модуль предоставляет удобные инструменты для работы с файлами и их коллекциями.

Shutil — это встроенный модуль в Python, который содержит различные методы для выполнения операций с файлами на высоком уровне. В частности, модуль предлагает методы для копирования файлов.

Один из таких методов — copy(). Он позволяет скопировать файл из исходного места в другой файл или каталог. При этом копируются только данные и права доступа к файлу, но не метаданные, такие как время создания или изменения файла.

Примечание. Если вы хотите скопировать файл в Python с его метаданными, вы можете использовать copy2().

Вот синтаксис использования метода stutil.copy() в Python.

shutil.copy(src_file, [dst_file or dst_directory], *, follow_symlinks=True)

Синтаксис состоит из следующих элементов.

Параметр Описание
src_file Этот параметр используется для указания пути к исходному файлу.
dst_file или dst_directory Этот параметр используется для указания файла назначения или каталога назначения.
Follow_symlinks Если значение равно False, src_file будет символической ссылкой, и для места назначения будет создана символическая ссылка. Однако его значение по умолчанию — True.

Далее мы рассмотрим пример использования метода Shutil.copy() Python для копирования файлов. Пример:

# importing modules
import shutil
import os

# path of the src directory
path = r'D:\test-1'

# Listing all files from src directory
print("List of files in source directory:")
print(os.listdir(path))
 
# Path of src file
src_file = r"D:\test-1\USA_Cities_Data.csv"
 
# Path of dst file
dst_file = r"D:\test-2\USA_Cities_Data(copy).csv"
 
# Copying file from src to dst
dest = shutil.copy(src_file, dst_file)

 
# Printing path of new file in destination
print("Destination path:", dest)

В этом примере мы копируем данные из файла USA_Cities_Data.csv, который находится в каталоге test-1, в файл USA_Cities_Data(copy).csv, который создаётся в каталоге test-2.

Если файл USA_Cities_Data(copy).csv уже существует, то данные не будут скопированы. В противном случае будет создан новый файл с указанным именем и в него будут скопированы данные.

Копирование файла из каталога test-1 в каталог test-2 с помощью Python

Содержание

Скопировать файл в каталог

Как уже говорилось в предыдущем разделе, при использовании метода copy() можно указать имя файла или каталога в параметре назначения.

Давайте рассмотрим пример копирования файлов в каталог с помощью метода Shutil.copy() в Python.

Вот код примера на Python.

# importing modules
import shutil
import os

# path of the src directory
path = r'D:\test-2'

# Listing all files from dst directory
print("List of files in destination directory before copy:")
print(os.listdir(path))
 
# Path of src file
src_file = r"D:\test-1\USA_Cities_Data.csv"
 
# Path of dst file
dst_file = r"D:\test-2"
 
# Copying file from src to dst
dest = shutil.copy(src_file, dst_file)

print("File copied successfully") 

# Printing path of new file in destination
print("Destination path:", dest)

print("List of files in destination directory after copy:")
print(os.listdir(path))

В этом примере мы копируем файл USA_Cities_Data.csv из каталога test-1 в каталог test-2 в Python.

Копирование файлов в каталог в Python

Копирование файла из одного каталога в другой

Рассмотрим следующий пример кода.

# importing modules
import os
import shutil

# path of the src & dst directory
src_directory = r"D:\test-1\\"
dst_directory = r"D:\test-2\\"

# fetching all files from src directory
for file in os.listdir(src_directory):
    # Defining full file path
    source = src_directory + file
    destination = dst_directory + file
    # copying files
    if os.path.isfile(source):
        shutil.copy(source, destination)
        print("file:", file, "copied")

В этом примере мы копируем все файлы, находящиеся в каталоге test-1, в каталог test-2 с помощью Shutil.copy().

  • Здесь сначала мы определяем пути к каталогам.
  • Затем мы перебрали каждый файл, указанный в исходном каталоге (test-1).
  • Наконец, мы скопировали все файлы из каталога test-1(src) в каталог test-2 (dst).

Копирование файлов из одного каталога в другой с помощью Python

Как скопировать файл и создать каталог

Для создания нового каталога с помощью Python мы будем использовать модуль os. Этот модуль включает метод mkdir(), который аналогичен использованию команды mkdir в командной строке Windows.

После создания каталога мы можем воспользоваться методом copy() из модуля Shutil, чтобы скопировать в него файлы.

Вот пример этого выполнения на Python.

# importing modules
import shutil
import os

# Path of src file
src_file = r"D:\test-1\USA_Cities_Data.csv"
 
# Path of dst file
dst_directory = r"D:\test-3"

# Creating new directory
os.mkdir(dst_directory)
print("New Directory Created Successfully")
 
# Copying file from src to new directory
dest = shutil.copy(src_file, dst_directory)

print("File copied successfully") 

# Printing path of new file in destination
print("Destination path:", dst_directory)

print("List of files in new directory after copying:")
print(os.listdir(dst_directory))

В приведенном выше примере:

  • Сначала мы определили путь к исходному файлу — USA_Cities_Data.csv.
  • Затем мы использовали метод os.mkdir() для создания нового каталога test-3.
  • В последнем случае мы использовали метод Shutil.copy() для копирования файла USA_Cities_Data.csv в каталог test-3.

Создание каталога и копирование в него файлов с помощью Python

Файл копии не найден

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

В таких случаях Shutil.copy() вернет:

 FileNotFoundError: [Errno 2] Нет такого файла или каталога

Вот пример примера, в котором метод Shutil.copy() не может найти файл USA_Cities_File.csv.

Файл копии Python Shutil не найден

Однако в Python мы можем решить эту проблему с помощью конструкции try-except для обработки исключений. Кроме того, перед копированием содержимого файла можно проверить, существует ли файл.

Файл копии существует

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

  • os.path.isfile(): этот метод используется для проверки существования заданного пути к файлу. Если указанный путь к файлу существует, он вернет True, иначе False.
  • os.path.isdir(): этот метод используется для проверки существования заданного пути к каталогу. Если указанный путь к каталогу существует, он вернет True, иначе False.

Теперь давайте посмотрим на пример на Python, который использует эти методы.

# importing modules
import shutil
import os

# Path of src file
src_file = r"D:\test-1\USA_Cities_Data.csv"
 
# Path of dst file
dst_file = r"D:\test-2"

if os.path.isfile(src_file):
    if os.path.isdir(dst_file):
        try:
            shutil.copy(src_file, dst_file) 
            print("File copies successfully")
        except shutil.Error as e:
            print(e)
    else:
        print("Destination directory does not exist")
else:
    print("Source file does not exits")
  • В этом примере мы используем методы os.path.isfile() и os.path.isdir() для проверки существования исходного файла и каталога назначения соответственно.
  • После этого мы использовали метод Shutil.copy() для копирования исходного файла в целевой каталог.
  • Более того, мы также использовали блок try-Exception для обработки исключений, создаваемых модулем Shutil.

Файл копии существует

Копировать файл с сохранением временной метки

Прежде чем мы начнём использовать метод copy() для сохранения временных меток, давайте разберёмся, как получить метаданные файла с помощью Python.

Для этого мы будем использовать метод os.stats(). Этот метод возвращает объект os.stat_result, который содержит метаданные для указанного файла. Давайте рассмотрим это на примере Python.

# Importing the os module
import os

# Path of the file
src_file = r"D:\test-1\USA_Cities_Data.csv"

# Printing metadata of the file
metadata = os.stat(src_file)
print("Metadata:", metadata)

В этом примере мы проверяем метаданные файла USA_Cities_Data.csv. Эта программа отобразит следующую информацию о файле:

Получение метаданных файла в Python

Теперь, если мы сосредоточимся на метаданных, нам нужно соблюдать следующие 3 значения.

  • st_atime: указывает время последнего доступа в секундах.
  • st_mtime: эта отметка времени показывает, когда контент был последний раз изменен в секундах.
  • st_ctime: обозначает время последней модификации метаданных в секундах.

Теперь, если использовать метод Shutil.copy(), он не сохранит тайминги файла от источника до места назначения.

Копировать файл Python Shutil с сохранением временной метки Метод copy() не сохраняет время от источника до файла назначения.

Чтобы сохранить время для целевого файла в Python, нам нужно использовать метод copy2() вместо copy(). Вот пример использования метода copy2(), который позволяет сохранить метку времени для целевого файла.

# importing modules
import shutil
import os

# path of the src directory
path = r'D:\test-1'
 
# Path of src file
src_file = r"D:\test-1\USA_Cities_Data.csv"
 
# Printing metadata of src file
metadata = os.stat(src_file)
print("Metadata of src file:", metadata)
    
# Path of dst file
dst_file = r"D:\test-2\USA_Cities_Data(copy).csv"
 
# Copying file from src to dst
dest = shutil.copy2(src_file, dst_file)
print('File copied successfully')

# Printing metadata of src file
metadata = os.stat(dest)
print("Metadata of dst file:", metadata)

В этом примере мы использовали функцию Shutil.copy2() для копирования содержимого файла USA_Cities_Data.csv в файл USA_Cities_Data(copy).csv. При использовании функции copy2() сохраняется значение st_mtime.

Вот результат выполнения программы на Python, о которой идёт речь.

Копирование файла с использованием Python с сохранением отметки времени

Добавить комментарий