Недавно, работая с файлами в 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 уже существует, то данные не будут скопированы. В противном случае будет создан новый файл с указанным именем и в него будут скопированы данные.
- Скопировать файл в каталог
- Копирование файла из одного каталога в другой
- Как скопировать файл и создать каталог
- Файл копии не найден
- Файл копии существует
- Копировать файл с сохранением временной метки
Скопировать файл в каталог
Как уже говорилось в предыдущем разделе, при использовании метода 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.
Копирование файла из одного каталога в другой
Рассмотрим следующий пример кода.
# 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 мы будем использовать модуль 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. Для этого необходимо указать правильное имя файла. Однако существует вероятность, что мы можем допустить ошибку и указать неправильное имя файла.
В таких случаях Shutil.copy() вернет:
FileNotFoundError: [Errno 2] Нет такого файла или каталога
Вот пример примера, в котором метод Shutil.copy() не может найти файл USA_Cities_File.csv.
Однако в 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. Эта программа отобразит следующую информацию о файле:
Теперь, если мы сосредоточимся на метаданных, нам нужно соблюдать следующие 3 значения.
- st_atime: указывает время последнего доступа в секундах.
- st_mtime: эта отметка времени показывает, когда контент был последний раз изменен в секундах.
- st_ctime: обозначает время последней модификации метаданных в секундах.
Теперь, если использовать метод Shutil.copy(), он не сохранит тайминги файла от источника до места назначения.
Метод 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, о которой идёт речь.