Удаление файла — пошаговое руководство
Спектр применения различных файлов огромен. Именно поэтому умение их удалять — важный навык. С помощью Python вы можете удалить любой файл на компьютере.
Допустим, вы пишете программу, которая анализирует статистику фондового индекса S&P 500 и записывает ее в файл. Возможно, вы хотите удалить уже существующий файл, чтобы освободить место для нового.
Метод os.remove() позволит вам удалить файл, а метод os.rmdir() — пустую папку. Если нужно удалить папку вместе с файлами внутри, можно воспользоваться методом shutil.rmtree() .
В этом руководстве мы научимся удалять файлы с помощью вышеуказанных методов, а также рассмотрим примеры их использования.
Руководство по удалению файлов
Как уже было сказано, в Python есть несколько методов для удаления файлов — os.remove() , os.rmdir() и shutil.rmtree() . Предназначены они для удаления файлов, директорий и папок с файлами внутри соответственно.
Как удалить файл с помощью метода os.remove()
Метод os.remove() используется для удаления файлов с жесткого диска. Важно: с его помощью нельзя удалить папку, только файл.
Модуль os позволяет разработчикам работать с операционной и файловой системой компьютера. os.remove — метод для удаления отдельных файлов, встроенный в модуль os .
Начать работу с этим методом просто — нужно импортировать модуль os с помощью оператора import .
import os
Теперь мы готовы удалять файлы с помощью метода os.remove() . Рассмотрим синтаксис этого метода:
import os os.remove(путь_к_файлу)
Метод os.remove() принимает один параметр — путь к файлу, который мы хотим удалить.
Допустим, мы пишем программу, которая анализирует оценки учеников математического класса в течение года.
Наши данные мы будем хранить в файле /home/school/math/final_analysis.csv. Но создавать файл сразу нельзя: возможно, он уже существует.
Чтобы удалить этот файл, можно написать следующую программу:
import os path = "/home/school/math/final_analysis.csv" os.remove(path) print("final_analysis.csv удален.")
Файл удален. Также мы вывели сообщение с помощью оператора print() :
final_analysis.csv удален.
В первой строке программы мы импортируем модуль os . В нем содержится метод os.remove() , который мы использовали в нашей программе. Затем мы объявляем переменную path . Эта переменная хранит себе путь к файлу, который мы хотим удалить.
Затем мы вызываем os.remove() и передаем в качестве аргумента path . После этого происходит удаление файла.
Удаление пустой директории с помощью os.rmdir()
Метод os.remove() не позволяет удалить папку. В этом вам поможет метод os.rmdir() , который используется для удаления пустых файлов и директорий.
Метод os.rmdir() принимает лишь один параметр — путь к папке, которую вы хотите удалить. Синтаксис этого метода выглядит так:
import os os.rmdir(file_path)
Допустим, мы решили хранить наши обработанные данные внутри папки final, которая находится внутри /home/school/math directory. После запуска программы мы эту папку удаляем, ведь создаем точно такую же новую. Для удаления папки final можно написать следующую программу:
import os path = "/home/school/math/final" os.rmdir(path) print("/home/school/math/final удалена.")
Наша программа удаляет директорию /home/school/math/final и печатает в консоль следующее:
/home/school/math/final удалена.
Метод os.rmdir() используется для удаления только пустых директорий. Если внутри папки будут содержаться файлы, программа вернет ошибку:
[Errno 13] Permission denied: '/home/school/math/final' Directory 'final' can not be removed
Допустим, вы пишете программу для удаления файлов. Вам может понадобиться функция, корректно обрабатывающая ошибки в случае их возникновения. В этом случае вам поможет блок try except .
В примерах выше мы видели, что в некоторых случаях может быть возвращена ошибка (например, если методу не хватает прав для удаления объекта). Если мы используем os.remove() для удаления директории — программа вернет ошибку. И если мы используем os.rmdir() для удаления папки, содержащей файлы, тоже будет возвращена ошибка.
Когда вы пишете программу, удаляющую файлы, вам может понадобиться функция, которая обрабатывает ошибки. Здесь вам пригодится блок except :
В примере вы видите использование того же метода os.rmdir() , но с механизмом обработки ошибок. В случае возникновения ошибки этот механизм выводит заранее определенное сообщение.
import os path = "/home/school/math/final" try: os.rmdir(path) print("/home/school/math/final удален.") except OSError as error: print("Возникла ошибка.")
Если мы запустим этот код и ошибок не возникнет, то папка будет удалена и в консоль выведется следующее:
/home/school/math/final удален.
Но если попытаться удалить тем же способом папку, содержащую файлы, программа выведет в консоль следующее сообщение:
Возникла ошибка.
В нашей программе мы использовали блок except . Выполнение начинается с проверки блока try . Если возникает ошибка — выполняется код внутри блока except . То есть, этот блок выполняется при возникновении ошибки OSError.
Удаление папки с файлами с помощью shutil.rmtree()
В библиотеке shutil есть метод shutil.rmtree() . Он используется для удаления папок, содержащих файлы.
Вообще эта библиотека предлагает сразу несколько методов, позволяющих проводить манипуляции с файловой системой. Но сейчас мы поговорим о shutil.rmtree() , с помощью которого можно удалить папку вместе с содержащимися в ней файлами.
Синтаксис метода shutil.rmtree() выглядит так:
import shutil shutil.rmtree(file_path)
Обратите внимание — мы импортируем модуль shutil . Как и os.remove() , метод shutil.rmtree() является частью внешнего модуля — именно поэтому мы проводим импорт.
Чтобы лучше понять метод, рассмотрим пример. Допустим, что программа для анализа оценок должна удалить директорию final. Но в ней уже хранятся файлы. Для удаления этой директории и всех файлов в ней мы можем написать следующую программу:
import shutil path = "/home/school/math/final" shutil.rmtree(path) print("/home/school/math/final удалена.")
Наша программа удаляет папку final и все ее содержимое. После этого в консоль выводится следующее сообщение:
/home/school/math/final удалена.
Программа должна удалить сама себя
Программа должна после принятия фразы «пока» удалить файл test.exe, который находится на диске D, где как раз таки и есть .exe файл программы, но когда я пишу «пока», программа просто закрывается, но не удаляет test.exe из диска D, то бишь не удаляет себя, подскажите что не так?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Программа, выводящая сама себя
Цель — написать такую программу, используя минимальное количество средств (я знаю только питон.

Может ли программа удалить сама себя?
Сначала я подумал, что нет. Да. Напрямую она конечно себя не удалит. А вот если она вызовет другую.
Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
Вводим число х. Функция должна вызывать сама себя до тех пор пока sum не станет больше х. Но.
Программа копирует сама себя
1)Как сделать что бы после запуска программы пошел оcчет 15 сек а затем запустилась программа .
Программа, копирующая сама себя
Нужно, чтобы программа скопировала сама себя в определенную папку. Если есть идеи, прошу отписать.
1727 / 967 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
Vladks, Программа, которая удаляет саму себя, может использоваться только как вредоносная программа. То есть напакостила и сама удалилась, что бы не оставлять следов.
Можно конечно использовать для демонстрации программы с последующим удалением с компьютера, что бы не могли ее использовать официально не приобретя. Но только автоматически я думаю это не возможно, так как ОС не удаляет программу с диска, а только помечает в таблице ее как удаленную, и позволяет в дальнейшем на ее месте записывать другие файлы. Но пока на ее месте не записано что то другое, ее можно восстановить. Поэтому те кто демонстрируют свою программу потом удаляют ее физически с диска. Как они это делают, не знаю, но как то делают.
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Сообщение от Vladks 
подскажите что не так?
Программа не может удалить саму себя (исполняемый файл), до тех пор пока она работает. После того как она перестала работать(завершилась) — она тем более не может удалить саму себя(свой файл), потому что. завершилась.
. Нужно начинать читать книги по ОС, чтобы не возникало подобных наивных вопросов.
P.S. Разумеется, обходные способы есть, но я не буду их озвучивать.
Удаление файла или папки в Python
Часто в ходе работы с файлами и папками на языке Python возникает необходимость их удаления. Например, может потребоваться очистить директорию от ненужных файлов или удалить временные файлы, созданные в ходе выполнения программы.
Для выполнения таких операций в Python существуют специальные функции, которые позволяют удалять как отдельные файлы, так и целые папки.
Удаление файла
Для удаления файла в Python используется функция os.remove() . Она принимает один аргумент — путь к удаляемому файлу.
import os os.remove("/путь/к/файлу.txt")
Если файл, указанный в аргументе, не существует, то будет выдана ошибка FileNotFoundError .
Удаление папки
Для удаления папки используется функция os.rmdir() . Она также принимает один аргумент — путь к удаляемой папке.
import os os.rmdir("/путь/к/папке")
При использовании этой функции важно помнить, что она удаляет только пустые папки. Если в папке есть файлы или другие папки, то будет выдана ошибка OSError .
Если же требуется удалить папку со всем её содержимым, то в этом случае можно использовать функцию shutil.rmtree() .
import shutil shutil.rmtree("/путь/к/папке")
Эта функция удалит указанную папку вместе со всем её содержимым, даже если в ней есть другие папки и файлы.
Выполняя операции удаления, всегда нужно быть внимательным и убедиться, что удаляемые файлы или папки больше не нужны, так как их восстановление может быть невозможным.
Как автоматизировать удаление ненужных файлов с помощью Python
Представьте такую ситуацию: вам нужно найти один файл, скаченный неделю назад, и сделать это быстро. Но вместо этого вы наталкиваетесь на беспорядочное нагромождение файлов в папке загрузок. Звучит знакомо? Я оказалась как раз в такой ситуации, и мне было не до смеха. Нужно было что-то предпринять, чтобы не стать жертвой надвигающегося бардака.
Тогда я решила взять ситуацию под свой контроль и изучила способы автоматизации задач очистки в системе. В статье поделюсь скриптами, которые помогли организовать цифровое пространство. При желании вы тоже можете ими воспользоваться.
Определение задач для автоматизации
Сначала требовалось определить задачи для автоматизации. По итогам вдумчивого анализа получился следующий перечень.
- Удаление повторяющихся файлов, например файлов с похожими именами ( img.png , img(1).png , img(2).png ), и сохранение самой последней версии с одновременным удалением всех остальных.
- Удаление временных файлов, в которых уже нет необходимости. К ним относятся: логи, скриншоты, кеш и установочные файлы.
- Систематизация файлов в папке загрузок Downloads путем упорядочивания их по типу и перемещение файлов в специально обозначенные папки.
- Удаление старых/неиспользуемых приложений, занимающих необходимое дисковое пространство.
Сформулированные задачи помогли понять, какие скрипты создавать и как оптимизировать их под свои конкретные потребности. С учетом всей подготовленной информации можно было приступать к процессу автоматизации.
Скрипт разбит на отдельные фрагменты кода для каждой задачи, чтобы облегчить настройку процесса автоматизации под свои нужды.
Удаление повторяющихся файлов
Довольно часто я обнаруживаю скопления нескольких версий одного и того же файла (разных размеров), поскольку скачиваю/сохраняю файлы из интернета или приложения с одинаковым именем!
Предлагаемый скрипт удаляет повторяющиеся файлы, сохраняет только самую последнюю версию и называет ее исходным именем, избавляя от всяких забот по отслеживанию разных имен:
import os
import re
def remove_duplicates(directory):
for root, dirs, files in os.walk(directory):
filedict = <>
for filename in files:
filepath = os.path.join(root, filename)
# Проверяет, повторяется ли файл
match = re.search(r'^(.*?)\((\d+)\)(\.[^.]*)?$', filename)
if match:
name = match.group(1)
number = int(match.group(2))
ext = match.group(3) or ''
# Добавление файла в словарь с именем в качестве ключа и числом в качестве значения
if name not in filedict:
filedict[name] = [(number, filepath, ext)]
else:
filedict[name].append((number, filepath, ext))
# Переименование файлов в каждой группе
for name in filedict:
files = filedict[name]
files.sort(key=lambda x: x[0])
print(files)
latest = files[-1][1]
ext = files[-1][2]
for number, filepath, _ in files[:-1]:
print(f"Deleted duplicate file: ")
os.remove(filepath)
os.rename(latest, os.path.join(root, f""))
print(f"Renamed to ")
remove_duplicates(os.path.expanduser("~/Downloads"))
Если вы ищите способ удаления файлов одинакового размера или содержания, то переходите за интересующей информацией по указанной ссылке.
Удаление временных файлов
Этот скрипт ищет временные файлы в таких директориях компьютера, как /private/var/folders , ~/Library/Caches , ~/Library/Logs , ~/Downloads и ~/Desktop , и удаляет те из них, что изрядно там подзадержались.
Скрипт знает, что делать: он содержит список расширений файлов extensions , которые находит и удаляет. Точно также он поступает и со скриншотами, накапливающимися в директории ~/Desktop :
import os
import shutil
# Список директорий для поиска временных файлов
temp_directories = [
'/private/var/folders',
'~/Library/Caches',
'~/Library/Logs',
'~/Downloads',
'~/Desktop'
]
# Список расширений файлов, подлежащих удалению
extensions = [
'.log',
'.cache',
'.tmp',
'.dmg',
'.pkg'
]
for directory in temp_directories:
for dirpath, dirnames, filenames in os.walk(os.path.expanduser(directory)):
for filename in filenames:
# Проверяет, значится ли расширение файла в списке тех, что подлежат удалению
if os.path.splitext(filename)[1].lower() in extensions:
filepath = os.path.join(dirpath, filename)
try:
if os.path.isfile(filepath):
os.remove(filepath)
elif os.path.isdir(filepath):
shutil.rmtree(filepath)
print(f"Removed ")
except Exception as e:
print(f"Error deleting : ")
# Удаление скриншотов из директории Desktop
if directory == '~/Desktop':
desktop_path = os.path.expanduser(directory) # expand ~ to home directory
screenshot_files = [f for f in os.listdir(desktop_path) if f.startswith('Screenshot')]
for file in screenshot_files:
filepath = os.path.join(desktop_path, file)
try:
os.remove(filepath)
print(f"Removed ")
except Exception as e:
print(f"Error deleting : ")
Систематизация и удаление файлов в папке Downloads
Содержимое моей папки Downloads напоминает ситуацию с пропавшими носками в сушилке — статус “утеряны безвозвратно”. Для поддержания порядка я систематизировала файлы по отдельным папкам в зависимости от их типа: изображения, видео, документы, аудио, код и даже файлы Photoshop :
Downloads/
├─ Image/
├─ Video/
│ ├─ Subtitle/
├─ Code/
├─ Document/
├─ Audio/
├─ Photoshop/
Созданный код также учитывает мою тягу к порядку и делает за меня всю грязную работу. Он распаковывает файлы .zip , удаляет файлы .torrent и даже перемещает файлы .srt в соответствующую папку. А вот и сам скрипт:
import os
import shutil
import zipfile
downloads_dir = os.path.expanduser("~/Downloads")
# Создание словаря типов файлов и соответствующих им папок
file_types = "Image": [".jpg", ".jpeg", ".png", ".gif", ".tiff", ".bmp", ".eps"],
"Code": [".ipynb",".py", ".js", ".html", ".css", ".php", ".cpp", ".h", ".java"],
"Document": [".pdf", ".doc", ".docx", ".txt", ".rtf", ".xls", ".xlsx", ".ppt", ".pptx"],
"Audio": [".mp3", ".wav", ".aac", ".ogg"],
"Video": [".mp4", ".avi", ".mov", ".flv", ".wmv", ".mpeg"],
"Photoshop": [".psd"],
>
# Создание папок для каждого типа файла
for folder_name in file_types.keys():
folder_path = os.path.join(downloads_dir, folder_name)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
# Итерация по файлам в папке Downloads
for filename in os.listdir(downloads_dir):
filepath = os.path.join(downloads_dir, filename)
# Распаковка и удаление файлов .zip
if filename.endswith(".zip"):
# Проверяет, распакован ли файл
unzip_dir = os.path.join(downloads_dir, filename[:-4])
if not os.path.exists(unzip_dir):
# Распаковка файла .zip
with zipfile.ZipFile(filepath, 'r') as zip_ref:
zip_ref.extractall(downloads_dir)
# Удаление файла .zip
os.remove(filepath)
print(f"Unzipped and removed ")
# Удаление файлов .torrent
elif filename.endswith(".torrent"):
os.remove(filepath)
print(f"Removed ")
# Перемещение файлов .srt в папку .subtitle внутри папки Video
elif filename.endswith(".srt"):
dest_folder = os.path.join(downloads_dir, "Video", ".subtitle")
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
shutil.move(filepath, os.path.join(dest_folder, filename))
print(f"Moved to ")
# Перемещение файла в соответствующую папку в зависимости от его расширения
else:
for folder_name, extensions in file_types.items():
if any(filename.endswith(ext) for ext in extensions):
dest_folder = os.path.join(downloads_dir, folder_name)
shutil.move(filepath, os.path.join(dest_folder, filename))
print(f"Moved to ")
break
Удаление старых/неиспользуемых приложений
У меня есть плохая привычка устанавливать несколько приложений, которыми практически не пользуюсь. Поэтому нужно было разработать механизм для обнаружения неиспользуемых приложений и периодического оповещения о них. С помощью следующего скрипта я легко могу определить, какие приложения не работают долгое время, и удалить их одним щелчком мыши:
import os
import subprocess
import time
# Определение количества дней бездействия приложения перед запросом на его удаление
inactivity_period = 90 # 90 дней
# Получение списка установленных приложений
apps_dir = "/Applications"
app_names = os.listdir(apps_dir)
# Проверка времени последнего доступа для каждого бинарного файла приложения и запрос на его удаление при условии 90-дневного неактивного периода
for app_name in app_names:
app_path = os.path.join(apps_dir, app_name)
if os.path.isdir(app_path):
app_binary = os.path.join(app_path, "Contents/MacOS", app_name[:-4])
if os.path.exists(app_binary):
last_access_time = os.stat(app_binary).st_atime
days_since_access = (time.time() - last_access_time) // (24 * 60 * 60)
if int(days_since_access) > inactivity_period:
alert_message = f"Are you still using ? Do you want to remove it?"
button_pressed = subprocess.run(['osascript', '-e', f'tell app "System Events" to display alert "" buttons > default button "Remove"', '-e', 'button returned of result'], stdout=subprocess.PIPE, encoding='utf-8').stdout.strip()
if button_pressed == "Remove":
print(f"Removed ")
subprocess.run(['sudo', 'rm', '-rf', app_path])
else:
print(f"Kept ")
with open('app_decisions.txt', 'a') as file:
file.write(f",Keep,\n")
Примечание. Данный скрипт следует задействовать только при условии полного понимания его функциональных возможностей и потенциальных рисков. Он разработан для удаления старых и неиспользуемых приложений, но может привести к случайному удалению важных приложений и данных.
Планирование периодического выполнения скриптов
Следующий этап после подготовки скриптов заключался в планировании их периодического выполнения. Это можно было сделать разными способами. Я же воспользовалась планировщиком cron для планирования запусков скриптов в системе Mac. Эта полезная утилита позволяет планировать выполнение задач через определенные промежутки времени.
Я открыла файл crontab и добавила следующие записи:
0 0 * * * /path/to/remove_dupes.py
0 0 * * * /path/to/remove_temps.py
0 5,17 * * * /path/to/download_cleanup.py
0 0 1 * * /path/to/remove_apps.py
Данные записи выполняют скрипты remove_dupes.py и remove_temps.py один раз в день. Скрипт download_cleanup.py — дважды в день в 5:00 и 17:00, а скрипт remove_apps.py — один раз в месяц в первый его день.
Воспользовавшись сайтом crontab guru, вы сможете планировать периодичность выполнения задач в соответствии со своими потребностями.
Перед планированием автоматического выполнения скриптов еще раз проверьте их и убедитесь, что они отвечают вашим целям. Каждый раз при автоматизации процессов будьте предельно внимательны, чтобы случайно не удалить что-то важное!
- Как автоматизировать операции Kubernetes посредством Python
- Планировщик cron и скрипты разведки с Docker
- Вспомнить все: 6 уникальных, но подзабытых утилит Linux
Читайте нас в Telegram, VK и Дзен
