Python file copy move

How to Move Files in Python: Single and Multiple File Examples

A quick way of moving a file from one place to another is using shutil.move() as shown:

We’ll look at some of the various options you’ve got for moving files around using Python. There’s also a quick example of how you could use the shutil and os libraries to tidy up your downloads folder in the first section. So if you’re someone that needs something like that in your life, then keep reading!

Option 1: shutil.move()

The example shown in the introduction uses the move() function from the shutil library. This function does what you’d expect and moves files from one location to the other, as follows:

shutil.move() works by first creating a copy of the file with the path defined by old_path and storing the copy in the new location, new_path . Finally, after the successful creation of the copy, Python deletes the original file located at old_path .

In cases where the original file is protected, shutil.move() will create a copy of the file in the new location, but Python will be unable to delete the original.

Most people have got quite messy download folders. So let’s look at a practical example of how we could use shutil.move() to store all the images in a download folder in a new folder called downloaded images :

Running this script inside a downloads folder will move any files with the extension .jpg or .JPG in the folder to the downloaded_images folder. Using os.listdir() returns a list of all the files in the folder. By then using os.mkdir(‘downloaded_images’) the downloaded_images folder is created. Using shutil.move() , Python can then move all the files in our images list to the new folder. This process is shown in the diagram below:

There’s a lot of room for improvement here. For example, we could upgrade our list comprehension to include more image types. We should also code in an if-else branch to see if the downloaded_images folder exists before running os.mkdir() . There’s also no reason we couldn’t expand this script to create separate folders for PDFs, executable files and anything else sitting in your downloads folder gathering dust!

Option 2: os.rename()

The os library also has a couple of options for moving files, one of these is os.rename() . os.rename() functions a little differently to shutil.move() .

Читайте также:  AJAX Send

Instead of copying the file in question, rename() alters the path of a file, which automatically changes the file location. See below for an example of how we could apply the function:

os.replace() works too. Despite the function being called replace() , it also moves files by renaming them. os.replace() can be implemented with an identical template to shutil.move() and os.rename() :

os.replace() and os.rename() can both be used to change a file or directory name. os.rename() reports errors differently depending on what operating system you’re running.

Whereas os.replace() will report errors uniformly across different systems, which may be the better choice when working on a program that needs compatibility with different operating systems.

Option 3: pathlib.Path().rename()

For a more object-oriented approach to moving files, pathlib is also an option.

By using the Path() function, Python creates a Path object. The rename() method then changes the path of the object, similarly to how os.rename() works:

We could also apply pathlib.Path().rename() to our script created earlier for moving images out of our downloads folder. See below for an example of this:

Below is a table that compares the speed difference of the three approaches:

Источник

8 команд для Python по работе с файлами и файловой системой, которые обязательно нужно знать

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

Эта статья предназначена как раз для начинающих разработчиков. В ней описаны 8 крайне важных команд для работы с файлами, папками и файловой системой в целом. Все примеры из этой статьи размещены в Google Colab Notebook (ссылка на ресурс — в конце статьи).

Показать текущий каталог

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

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

Читайте также:  Вставлять баннер в html

Так вот, для того чтобы показать текущий каталог, нужна встроенная в Python OS-библиотека:

Ее легко запомнить, так что лучше выучить один раз, чем постоянно гуглить. Это здорово экономит время.

Имейте в виду, что я использую Google Colab, так что путь /content является абсолютным.

Проверяем, существует файл или каталог

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

Функция os.path.exists () принимает аргумент строкового типа, который может быть либо именем каталога, либо файлом.

В случае с Google Colab при каждом запуске создается папка sample_data. Давайте проверим, существует ли такой каталог. Для этого подойдет следующий код:

Эта же команда подходит и для работы с файлами:

Если папки или файла нет, команда возвращает false.

Объединение компонентов пути

В предыдущем примере я намеренно использовал слеш «/» для разделителя компонентов пути. В принципе это нормально, но не рекомендуется. Если вы хотите, чтобы ваше приложение было кроссплатформенным, такой вариант не подходит. Так, некоторые старые версии ОС Windows распознают только слеш «\» в качестве разделителя.

Но не переживайте, Python прекрасно решает эту проблему благодаря функции os.path.join (). Давайте перепишем вариант из примера в предыдущем пункте, используя эту функцию:

os.path.exists(os.path.join('sample_data', 'README.md'))

Создание директории

Ну а теперь самое время создать директорию с именем test_dir внутри рабочей директории. Для этого можно использовать функцию
os.mkdir():

Давайте посмотрим, как это работает на практике.

Если же мы попытаемся создать каталог, который уже существует, то получим исключение.

Именно поэтому рекомендуется всегда проверять наличие каталога с определенным названием перед созданием нового:

if not os.path.exists('test_dir'): os.mkdir('test_dir')

Еще один совет по созданию каталогов. Иногда нам нужно создать подкаталоги с уровнем вложенности 2 или более. Если мы все еще используем os.mkdir (), нам нужно будет сделать это несколько раз. В этом случае мы можем использовать os.makedirs (). Эта функция создаст все промежуточные каталоги так же, как флаг mkdir -p в системе Linux:

os.makedirs(os.path.join('test_dir', 'level_1', 'level_2', 'level_3'))

Показываем содержимое директории

Еще одна полезная команда — os.listdir(). Она показывает все содержимое каталога.

Команда отличается от os.walk (), где последний рекурсивно показывает все, что находится «под» каталогом. os.listdir () намного проще в использовании, потому что просто возвращает список содержимого:

В некоторых случаях нужно что-то более продвинутое — например, поиск всех CSV-файлов в каталоге «sample_data». В этом случае самый простой способ — использовать встроенную библиотеку glob:

from glob import globlist(glob(os.path.join('sample_data', '*.csv')))

Перемещение файлов

Самое время попробовать переместить файлы из одной папки в другую. Рекомендованный способ — еще одна встроенная библиотека shutil.
Сейчас попробуем переместить все CSV-файлы из директории «sample_data» в директорию «test_dir». Ниже — пример кода для выполнения этой операции:

import shutilfor file in list(glob(os.path.join('sample_data', '*.csv'))): shutil.move(file, 'test_dir')

Кстати, есть два способа выполнить задуманное. Например, мы можем использовать библиотеку OS, если не хочется импортировать дополнительные библиотеки. Как os.rename, так и os.replace подходят для решения задачи.

Читайте также:  Reverse sort list in python

Но обе они недостаточно «умные», чтобы позволить перемесить файлы в каталог.

Чтобы все это работало, нужно явно указать имя файла в месте назначения. Ниже — код, который это позволяет сделать:

for file in list(glob(os.path.join('test_dir', '*.csv'))): os.rename( file, os.path.join( 'sample_data', os.path.basename(file) ))

Здесь функция os.path.basename () предназначена для извлечения имени файла из пути с любым количеством компонентов.

Другая функция, os.replace (), делает то же самое. Но разница в том, что os.replace () не зависит от платформы, тогда как os.rename () будет работать только в системе Unix / Linux.

Еще один минус — в том, что обе функции не поддерживают перемещение файлов из разных файловых систем, в отличие от shutil.

Поэтому я рекомендую использовать shutil.move () для перемещения файлов.

Копирование файлов

Аналогичным образом shutil подходит и для копирования файлов по уже упомянутым причинам.

Если нужно скопировать файл README.md из папки «sample_data» в папку «test_dir», поможет функция shutil.copy():

shutil.copy( os.path.join('sample_data', 'README.md'), os.path.join('test_dir') )

Удаление файлов и папок

Теперь пришел черед разобраться с процедурой удаления файлов и папок. Нам здесь снова поможет библиотека OS.

Когда нужно удалить файл, нужно воспользоваться командой os.remove():

os.remove(os.path.join('test_dir', 'README(1).md'))

Если требуется удалить каталог, на помощь приходит os.rmdir():

os.rmdir(os.path.join('test_dir', 'level_1', 'level_2', 'level_3'))

Однако он может удалить только пустой каталог. На приведенном выше скриншоте видим, что удалить можно лишь каталог level_3. Что если мы хотим рекурсивно удалить каталог level_1? В этом случае зовем на помощь shutil.

Функция shutil.rmtree() сделает все, что нужно:

shutil.rmtree(os.path.join('test_dir', 'level_1'))

Пользоваться ею нужно с осторожностью, поскольку она безвозвратно удаляет все содержимое каталога.

Собственно, на этом все. 8 важных операций по работе с файлами и каталогами в среде Python мы знаем. Что касается ссылки, о которой говорилось в анонсе, то вот она — это Google Colab Network с содержимым, готовым к запуску.

Источник

Оцените статью