Очень часто в 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 в Москве.