Как удалить файлы по имени в Python?

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

Описанный ниже способ отлично работает в Python, начиная с 3.4 версии!

Исходные даннные:

1. Датасет с фотографиями собак, среди которых находится несколько лишних фото:

удалить файлы по имени в Python

2. Список с именами лишних фото del_list = [«4.jpg», «9.jpg», «14.jpg»]

Что нужно сделать?

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

Решение:

1. Определим путь к рабочей директории

Пусть все фото располагаются в папке под названием «photos», а питоновский файл с кодом находится в одной директории с папкой «photos».

Тогда абсолютный путь к папке «photos» будет иметь вид — pathlib.Path.cwd():

# импортируем модуль pathlib для работы с путями к файлам
import pathlib
# импорт класса Path модуля pathlib
from pathlib import Path

# получаем объект пути с текущим каталогом
photos_path = pathlib.Path.cwd()

В результате работы метода pathlib.Path.cwd() в переменной photos_path будет сохранен объект абсолютного пути к директории с текущим питоновским файлом и папкой photos.

2. Определим список с именами лишних файлов

import pathlib
from pathlib import Path
photos_path = pathlib.Path.cwd()

# Определим список с именами лишних файлов
del_list = ['4.jpg', '9.jpg', '14.jpg']

3. Реализуем поочередное удаление файлов

Пробегая по списку del_list в цикле for, поочередно проверим, существует ли в текущей директории в папке «photos» файл с указанным именем. Если такой файл существует, то удалим его с помощью метода Path.unlink() и выведем сообщение об успешном удалении. В противном случае, если файл с таким именем не найден, выведем сообщение о его отсутствии:

import pathlib
from pathlib import Path
photos_path = pathlib.Path.cwd()

Определим список с именами лишних файлов
del_list = ['4.jpg', '9.jpg', '14.jpg']

# поочередно проходим по элементам списка del_list
for file_name in del_list:
    # определяем путь к текущему файлу с именем file_name
    file_path = Path(photos_path, 'photos', file_name)
    # если файл по пути file_path существует, 
    if Path.exists(file_path):
        # удаляем его и выводим сообщение об успешном удалении
        Path.unlink(file_path)
        print('Файл успешно удален: ' + str(file_path))
    # если файла, на который указывает путь file_path, не существует,
    else:
        # выводим сообщение об отсутствии файла
        print('Нет такого файла: ' + str(file_path))

Рассмотрим приведенный выше код немного подробнее:

В этом небольшом куске кода мы использовали:

1. Экземпляр класса Path. В нашем случае объект класса Path, хранящийся в переменной file_path, содержит абсолютный путь до файла с именем file_name. Так как файл с кодом расположен в той же директории, что и папка photos со всеми фотографиями, то путь к нужному файлу будет иметь вид:

абсолютный_путь_к_директории_с_кодом_и_папкой_photos\'photos'\'имя_файла_который_нужно_удалить.jpg'

При создании объекта Path достаточно лишь перечислить части пути к файлу через запятую:

file_path = Path(абсолютный_путь_к_директории_с_кодом_и_папкой_photos, 'photos', 'имя_файла_который_нужно_удалить.jpg')

или (что идентично):

file_path = Path(photos_path, 'photos', file_name),

если photos_path равен абсолютному пути к директории с кодом и папкой photos, а file_name содержит имя файла, который нужно удалить.

В результате получим переменную file_path, содержащую абсолютный путь до файла с именем file_name.

2. Метод exists() класса Path.

Метод-разведчик, проверяющий, существует ли переданный в качестве параметра путь. Возвращает True или False в зависимости от того, будет ли найден указанный путь. Таким образом, выражение:

Path.exists(file_path)

вернет True, если найдет файл по адресу file_path, в противном случае вернет False.

3. Метод unlink() класса Path

Метод, позволяющий удалить файл. В качестве параметра методу unlink() необходимо передать путь к файлу, подлежащему удалению. В приведенном ниже примере будет удален файл, расположенный по пути file_path.

Path.unlink(file_path)

У нас появился Telegram-канал для изучающих Python! Подписывайтесь по ссылке: «Кодим на Python! Вместе «питонить» веселее! 😉

Заключительная проверка кодакак удалить файлы по имени в Python:

Ниже размещен полный текст с кодом:

# импортируем модуль pathlib для работы с путями к файлам
import pathlib
# импорт класса Path модуля pathlib
from pathlib import Path

# получаем объект пути с текущим каталогом
photos_path = pathlib.Path.cwd()
# Определим список с именами лишних файлов
del_list = ['4.jpg', '9.jpg', '14.jpg']

# поочередно проходим по элементам списка men_list
for file_name in del_list:
    # определяем путь к текущему файлу с именем file_name
    file_path = Path(photos_path, 'photos', file_name)
    # если файл по пути file_path существует, 
    if Path.exists(file_path):
        # удаляем его и выводим сообщение об успешном удалении
        Path.unlink(file_path)
        print('Файл успешно удален: ' + str(file_path))
    # если файла, на который указывает путь file_path, не существует,
    else:
        # выводим сообщение об отсутствии файла
        print('Нет такого файла: ' + str(file_path))

Для успешной работы размещенного выше кода нужно, чтобы питоновский файл с кодом был расположен в одной директории с папкой photos!

Добавить комментарий