Нужно скопировать файлы в коде Python? Вот как копировать файлы в Python с помощью shutil, os, subprocess и библиотек
Вы хотите улучшить свои навыки работы с Python? Тогда вы можете попробовать выполнять некоторые задачи на своем компьютере с помощью Python. Копирование и вставка файлов из одного каталога в другой с помощью Python – интересный способ сделать это
Помимо того, что это весело, это позволяет вам быстро читать и записывать файлы, не отвлекаясь от своего кода. Если вы новичок в Python, это навык, который вам, так или иначе, придется освоить. Итак, давайте узнаем, как копировать файлы с помощью Python в этой заметке
Требования для копирования файлов с помощью Python
Существует множество способов копирования и вставки файлов с помощью Python. Поэтому требования для этого различны и зависят от метода, который вы решите использовать
Хотя вам могут не понадобиться дополнительные модули для копирования файлов с помощью Python, вы все равно можете использовать встроенные библиотеки, если хотите
Например, если вы хотите использовать метод os , вам нужно импортировать его в свой код. Однако одним из популярных способов копирования файлов в Python является использование библиотеки shutil
Давайте посмотрим, как мы можем использовать эти различные методы для копирования файлов в Python
Похожие: Как отправлять автоматические сообщения электронной почты в Python
Как копировать файлы с помощью встроенной библиотеки Shutil в Python
Модуль shutil – это встроенная и мощная библиотека Python для быстрого чтения и записи файлов в Python
Для его использования достаточно указать полный путь к исходному и целевому файлам
По сути, shutil принимает такой формат:
shutil.copy( source directory path , destination directory path , follow_symlinks=True
Например, приведенный ниже код использует shutil.copy() для копирования файла с именем copy.txt из папки my_folder в другую с именем destination. Затем он переименовывает файл назначения в newFile.txt :
importshutil
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 :
importshutil
shutil.copy2(sourceFile, destinationFile, follow_symlinks=True
Приведенный выше метод сохраняет оригинальные метаданные старого файла в файле назначения. Например, файл назначения сохраняет дату создания исходного файла, его размер и другие атрибуты
Аргумент follow_symlinks – это объявление символической ссылки, позволяющее shutil следовать по абсолютному пути. Поэтому его необходимо включить, если исходный и конечный файлы находятся в разных каталогах
Но если оба файла находятся в текущем рабочем каталоге, включать follow_symlinks не нужно. Если вы это сделаете, Python вызовет исключение синтаксиса
Итак, если вы вставляете исходный файл в текущий рабочий каталог, ваш код должен выглядеть следующим образом:
importshutil
shutil.copy2(sourceFile, destinationFile)
В дополнение к использованию методов shutil, описанных выше, вы также можете использовать shutil.copyfile или shutil.copyfileobj
Использование shutil.copyfileobj немного отличается, так как для этого требуется встроенная функция open. Затем вам нужно прочитать и записать двоичный файл, включив аргументы ‘rb’ и ‘wb’
Давайте посмотрим, как работает метод shutil.copyfileobj , используя те же директории, которые мы использовали ранее:
importshutil.
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() :
importshutil
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 является то, что они копируют файлы только в пределах текущего рабочего каталога
Чтобы использовать метод os.system() в Windows:
importos
os.system('copy source.txt destination.txt)
Можно также использовать встроенную команду терминала Windows xcopy :
importos
os.system('xcopy source.txt destination.txt)
Чтобы использовать метод os.system в Linux, замените copy на cp :
importos
os.system('cp source.txt destination.txt)
Как копировать файлы с помощью метода os.popen
Чтобы использовать этот метод, замените os.system() на os.popen()
В Windows используйте:
importos
os.popen('copy source.txt destination.txt)
Как и в случае с os.system() , замените copy на cp , чтобы использовать этот метод в Linux:
importos
os.popen('cp source.txt destination.txt)
Как копировать файлы с помощью модуля subprocess в Python
В дополнение к вышеперечисленным методам, вы также можете использовать библиотеку subprocess() для копирования файлов в Python:
importsubprocessassp
sp.call('copy sourceFile destinationFile', shell=True
Однако в Linux используйте:
importsubprocessassp
sp.call('cp sourceFile destinationFile', shell=True
Библиотека subprocess также использует метод subprocess.check_out(). Он работает так же, как и subprocess.call() :
importsubprocessassp
sp.check_out('copy sourceFile destinationFile', shell=True
В Linux замените copy на cp :
importsubprocessassp
sp.check_out('cp sourceFile destinationFIle', shell=True
Однако, как и методы os, методы subprocess работают только с файлами в текущем рабочем каталоге
Примечание: Вы также можете копировать файлы в папку, если она находится в том же рабочем каталоге, что и исходный файл. Все, что вам нужно сделать, это заменить имя конечного файла именем конечной папки. Однако убедитесь, что папка назначения и исходный файл находятся в текущем рабочем каталоге
Как копировать файлы в Python без использования библиотек
Вы также можете копировать файлы в Python без использования библиотек. Как и в методе shutil, вам понадобятся только полные пути к исходному и целевому каталогам
Вот как этого можно добиться:
sourcePath ='C:/Users/source_directories/my_folder/copy.txt'
destinationPath ='C:/Users/some_directories/destination_directories/newFile.txt'
withopen(sourcePath,'rb'asread:
withopen(destinationPath,'wb'asmyfile:
myfile.write(read.read())
Чтобы сделать код многоразовым, его можно модифицировать в функцию:
defcopyFile(source=None, destination=None)
ifnot(sourceanddestination)==None
withopen(source,'rb'asread:
withopen(destination,'wb'asmyfile:
myfile.write(read.read())
else
print('Please enter the source and destination paths'
copyFile(sourcePath, destinationPath)
Вот и все. Вы только что создали многоразовый копировщик файлов с помощью Python без использования какой-либо библиотеки
Продолжайте автоматизировать задачи с помощью Python
Копирование файлов с помощью Python не только помогает вам сосредоточиться на коде при создании проектов, но и позволяет лучше понять управление файлами с помощью Python. Однако, игра с задачами Python – это способ улучшить свои навыки работы с Python, особенно если вы новичок
Например, вы можете изменить дату и время на своем компьютере с помощью модуля os. При желании вы даже можете писать пользовательские команды bash с помощью Python
Комментировать