Переименовываем, удаляем и копируем файлы с помощью Python

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

Очень часто в Data Science приходится подготавливать данные: копировать удалять, переименовывать. С Python это осуществляется за пару строк. В этой статье мы расскажем, как переименовывать, удалить файлы, а также как скопировать файлы из одной папки в другую c помощью Python.

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

Допустим у нас есть директория home/user/images, в которой хранится какое-то множество картинок с разными названиями. Перед нами стоит задача переименовать их так, что название будет состоять из номера от 0 до n – 1, где n – это количество файлов.

Для решения этой задачи нам понадобится Python-библиотека pathlib, которая работает с файловой системой (мы также говорили о ней тут). Главным компонентом этой библиотеки является Path – путь. Путем может быть директория или файл. У него есть метод glob, с помощью которого можно проходится по вложенным в него путям, в том числе и файлам. Этот метод возвращает список вложенных путей, поэтому около него можно проходиться циклом.

Объект Path обладает методом rename, который переименовывает путь (файл или директорию). Итак, мы можем задать в glob все файлы с расширением .jpg, что вернет список путей до всех jpg-изображений, а потом к каждому из них применим метод rename.

Пример кода в Python для переименования всех файлов выглядит так:

import pathlib

# На Windows путь будет что-то вроде:
# D:\\user\\images
path = pathlib.Path("/home/user/images")
for i, path in enumerate(path.glob('*.jpg')):
    new_name = str(i) + '.jpg'
    path.rename(new_name)

Удаляем файлы c помощью Python

Удалить файлы, удовлетворяющие какому-то условию тоже можно сделать аналогичным способом. Допустим в директории есть еще файлы .txt, которые нужно удалить. На также понадобится метод unlink, который удаляет объект пути.

Код на Python для удаления файлов будет выглядеть следующим образом:

path = pathlib.Path("/home/user/images")
for p in path.glob('*.txt'):
    p.unlink()

Здесь нам не нужно использовать enumerate, поскольку это было бы лишнее.

Копируем файлы из одной директории в другую с помощью библиотеки shutil

Еще одной распространенной задачей в Data Science является перемещение файлов из одной директории в другую. Допустим имеется большой датасет, который нужно разбить на три выборки: тренировочную, тестовую и валидационную. Здесь нам поможет стандартная Python-библиотека – shutil.

У библиотеки shutil есть функция копирования файлов copy, которая принимает в качестве аргументов исходную директорию (откуда копируем) и директорию назначения (куда копируем).

Мы напишем свою процедурную функцию, которая будет проходиться по файлам и копировать их из директории src в директорию dest. Также добавим с какого по какой номер файла проводить копирование (при условии, что мы переименовали их в номера, как это сделано выше).

Итак, Pthon-код нашей функции по копированию файлов выглядит так:

import shutil

def copy_files(src, dest, name, start, stop):
    fnames = [f'{i}.jpg' for i in range(start,stop)]
    for fname in fnames:
        src_file = src / fname
        dest_file = dest / fname
        shutil.copy(src_file, dest_file)

Мы здесь копируем конкретно jpg-файлы, но вы можете указать и что-то другое. Также заметим, что оператор / просто добавляет к пути директории заданный файл.

Теперь можем ее вызвать. Например, всего имелось 1000 файлов, из которых 700 нужно скопировать в тренировочную выборку и по 150 в тестовую и валдиационную. Выглядит это следующим образом:

src = pathlib.Path('home/user/images')

train_dir = pathlib.Path('home/user/train')
test_dir = pathlib.Path('home/user/test')
valid_dir = pathlib.Path('home/user/valid')

copy(src, train_dir, 0, 700)
copy(src, test_dir, 700, 850)
copy(src, valid_dir, 850, 1000)

 

Еще больше подробностей о подготовке данных в Python перед применением алгоритмов машинного обучения на реальных примерах Data Science вы узнаете на специализированном курсе по машинному обучению «DPREP: Подготовка данных для Data Mining на Python» в лицензированном учебном центре обучения и повышения квалификации разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве.

Источники
  1. pathlib
  2. shutil
Комментировать