Изучение Python? Вот как скопировать файл

Вы хотите улучшить свои навыки Python? Затем вы можете попробовать выполнить некоторые задачи на своем компьютере с помощью Python. Копирование и вставка файлов из одного каталога в другой с помощью Python – интересный способ сделать это.

Это не только весело, но и позволяет быстро читать и записывать файлы, не отвлекаясь от кода. Если вы новичок в Python, вам все равно может понадобиться овладеть этим навыком. Итак, давайте узнаем, как копировать файлы с помощью Python через этот пост.

Требования для копирования файлов с помощью Python

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

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

Например, если вы хотите использовать метод os , вам необходимо импортировать его в свой код. Однако одним из популярных способов копирования файлов с помощью Python является использование библиотеки shutil .

Давайте посмотрим, как мы можем использовать эти различные методы для копирования файлов с помощью Python.

Как копировать файлы с помощью встроенной библиотеки Python Shutil

Модуль shutil – это встроенная мощная библиотека Python для быстрого чтения и записи файлов в Python.

Чтобы использовать его, вам нужно только указать полный путь к исходному и целевому файлам.

По сути, shutil принимает такой формат:

 shutil.copy([source directory path], [destination directory path], follow_symlinks=True)

Например, в приведенном ниже коде используется shutil.copy () для копирования файла с именем copy.txt из папки с именем my_folder в другую с именем назначения . Затем он переименовывает конечный файл в newFile.txt :

 import shutil
sourceFile = "C:/Users/some_directories/my_folder/copy.txt"
destinationFile = "C:/Users/some_directories/destination/newFile.txt"
shutil.copy(sourceFile, destinationFile, follow_symlinks=True)

Обратите внимание, что вы можете написать свой код в любом редакторе кода по вашему выбору . Затем вы можете запустить его из командной строки.

Однако вы также можете использовать интегрированную среду разработки Python (IDLE) по умолчанию, если вы не знакомы с запуском Python через командную строку.

Связано: Команды командной строки (CMD), которые вы должны знать

Метод shutil.copy не копирует метаданные исходного файла. По сути, ваша машина видит конечный файл как полностью новый и передает ему новые метаданные.

Однако, чтобы скопировать метаданные вместе с исходным файлом, используйте метод shutil.copy2 :

 import shutil
shutil.copy2(sourceFile, destinationFile, follow_symlinks=True)

Вышеупомянутый метод сохраняет исходные метаданные старого файла в конечном файле. Например, конечный файл сохраняет дату создания исходного файла, его размер и другие атрибуты.

Аргумент follow_symlinks – это объявление символической ссылки, позволяющее shutil следовать по абсолютному пути. Поэтому вам необходимо включить его, если исходный и целевой файлы находятся в разных каталогах.

Но если оба файла находятся в вашем текущем рабочем каталоге, вам не нужно включать follow_symlinks . Если вы это сделаете, Python выдаст исключение синтаксиса.

Итак, если вы вставляете исходный файл в текущий рабочий каталог, ваш код должен выглядеть так:

 import shutil
shutil.copy2(sourceFile, destinationFile)

Помимо описанных выше методов shutil, вы также можете использовать shutil.copyfile или shutil.copyfileobj .

Использование shutil.copyfileobj немного отличается, поскольку требует встроенной функции открытия . Затем вам нужно читать и записывать двоичный файл, включая аргументы «rb» и «wb» .

Давайте посмотрим, как метод shutil.copyfileobj работает с теми же каталогами, которые мы использовали ранее:

 import shutil
sourceFilePath = open("C:/Users/some_directories/my_folder/copy.txt", "rb")
destinationFilePath = open("C:/Users/some_directories/destination/newFile.txt", "wb")
shutil.copyfileobj(sourceFilePath, destinationFilePath)

Обратите внимание, что shutil.copyfileobj () не требует аргумента follow_symlinks .

Однако shutil.copyfile () работает почти так же, как .copy и .copy2 . Они лишь незначительно отличаются по своим внутренним функциям.

Чтобы использовать метод shutil.copyfile () :

 import shutil
sourceFilePath = "C:/Users/some_directories/my_folder/copy.txt"
destinationFilePath = "C:/Users/some_directories/destination/newFile.txt"
shutil.copyfile(sourceFilePath, destinationFilePath)

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

Модуль os использует два встроенных метода для копирования файлов; os.system () и os.popen () .

Метод os.system () позволяет имитировать среду командной строки.

Однако недостатком методов ОС является то, что они копируют файлы только в текущем рабочем каталоге.

Чтобы использовать метод os.system () в Windows:

 import os
os.system('copy source.txt destination.txt)

Вы также можете использовать встроенную команду терминала xcopy Windows:

 import os
os.system('xcopy source.txt destination.txt)

Чтобы использовать метод os.system в Linux, замените copy на cp :

 import os
os.system('cp source.txt destination.txt)

Как копировать файлы с помощью метода os.popen

Чтобы использовать этот метод, замените os.system () на os.popen () .

В Windows используйте:

 import os
os.popen('copy source.txt destination.txt)

Как и в случае с os.system () , замените copy на cp, чтобы использовать этот метод в Linux:

 import os
os.popen('cp source.txt destination.txt)

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

В дополнение к вышеуказанным методам вы также можете использовать библиотеку subprocess () для копирования файлов в Python:

 import subprocess as sp
sp.call("copy sourceFile destinationFile", shell=True)

Однако в Linux используйте:

 import subprocess as sp
sp.call("cp sourceFile destinationFile", shell=True)

Библиотека подпроцесса также использует метод subprocess.check_out () . Он работает так же, как subprocess.call () :

 import subprocess as sp
sp.check_out("copy sourceFile destinationFile", shell=True)

В Linux замените copy на cp :

 import subprocess as sp
sp.check_out("cp sourceFile destinationFIle", shell=True)

Однако, как и методы ОС, методы подпроцесса работают только с файлами в вашем текущем рабочем каталоге.

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

Как копировать файлы в Python без использования библиотек

Вы также можете копировать файлы в Python независимо от какой-либо библиотеки. Как и в случае с методом shutil, вам нужны только полные пути к исходному и целевому каталогам.

Вот как этого добиться:

 sourcePath = "C:/Users/source_directories/my_folder/copy.txt"
destinationPath = "C:/Users/some_directories/destination_directories/newFile.txt"
with open(sourcePath, "rb") as read:
with open(destinationPath, "wb") as myfile:
myfile.write(read.read())

Чтобы сделать код многоразовым , вы можете преобразовать его в функцию:

 def copyFile(source=None, destination=None):
if not (source and destination)==None:
with open(source, "rb") as read:
with open(destination, "wb") as myfile:
myfile.write(read.read())
else:
print("Please enter the source and destination paths")
copyFile(sourcePath, destinationPath)

Вот и все. Вы только что сделали многоразовый копировальный аппарат с Python без использования какой-либо библиотеки.

Продолжайте автоматизировать задачи с помощью Python

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

Например, вы можете изменить дату и время на своем ПК с помощью модуля ОС. Вы даже можете писать собственные команды bash с помощью Python, если хотите.