Изучение 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 через командную строку.
Метод 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, если хотите.