Python os remove permission error

In Python, you can use the os.remove method to remove files and folders, but sometimes it may resulting in some errors, this is because you do not master how to use the os.remove method correctly. This article will introduce how to use the python os.remove method correctly to avoid errors. 1. Python os.remove Method Overview. … How To Use Python os.remove Method To Remove Files And Folders Read More »

In Python, you can use the os.remove method to remove files and folders, but sometimes it may resulting in some errors, this is because you do not master how to use the os.remove method correctly. This article will introduce how to use the python os.remove method correctly to avoid errors.

1. Python os.remove Method Overview.

  1. Grammar: os.remove(path).
  2. Parameter: Path — file path to remove.
  3. Return value: The method does not return value.

2. How To Use It To Avoid Errors.

  1. Can not use os.remove to delete a folder, otherwise, it will throw an error.
    # The test folder is an empty folder, from the folder permission, we can see that everyone can remove the below folder.
    drwxrwxrwx    2 songzhao  staff       64 Feb 25 09:33 test
    
    # But when we remove it with the python os.remove method, it will through an Operation not permitted error.
    
    >>> import os
    >>> 
    >>> 
    >>> os.remove('./test')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    PermissionError: [Errno 1] Operation not permitted: './test'
    
    # os.remove method can remove a file successfully.
    >>> os.remove('./test/test.php')
    
    # Now the test folder is empty, but when you remove it with os.remove method, it will still throw Operation not permitted error.
    >>> os.remove('./test')
    Traceback (most recent call last):
      File "", line 1, in 
    PermissionError: [Errno 1] Operation not permitted: './test'
    

3. How To Remove A Folder With Files Inside In Python.

  1. We can use python shutil.rmtree method to remove a folder with files inside it recursively.
    >>> import shutil
    >>> 
    >>> shutil.rmtree('./test')
  2. But the python shutil.rmtree method can only be used to remove a folder, when you use it to remove a file, it will throw Not a directory error.
    >>> import shutil
    >>> 
    >>> 
    >>> shutil.rmtree('./test/test.py')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py", line 513, in rmtree
        return _rmtree_unsafe(path, onerror)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py", line 374, in _rmtree_unsafe
        onerror(os.scandir, path, sys.exc_info())
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py", line 371, in _rmtree_unsafe
        with os.scandir(path) as scandir_it:
    NotADirectoryError: [Errno 20] Not a directory: './test/test.py'

4. Python os.remove Method Example.

>>> import os, sys
>>> 
# Get current python execution path.
>>> curr_path = os.getcwd()
>>> 
>>> print(curr_path)
/Users/songzhao
>>> 
>>> new_path = curr_path + '/test'
>>> 
>>> print(new_path)
/Users/songzhao/test
>>> 
>>> 
# List files in the new directory.
>>> os.listdir(new_path)
['test.py']
>>> 
# Use os.remove to remove a directory, it will throw an error.
>>> os.remove(new_path)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
PermissionError: [Errno 1] Operation not permitted: '/Users/songzhao/test'
>>> 
# Use os.remove to remove a file will be successful.
>>> os.remove(new_path+'/test.py')
>>> 
>>> 
# After the file has been removed, the directory is empty.
>>> os.listdir(new_path)
[]

In this article, we will cover how to delete (remove) files and directories in Python. Python provides different methods and functions for removing files and directories. One can remove the file according to their need. 

Various methods provided by Python are –

  • Using os.remove()
  • Using os.rmdir()
  • Using shutil.rmtree()
  • Using pathlib.Path(empty_dir_path).rmdir()

Deleting file/dir using the os.remove() method

OS module in Python provides functions for interacting with the operating system. All functions in the os module raise OSError in the case of invalid or inaccessible file names and paths, or other arguments that have the correct type but are not accepted by the operating system. 

os.remove() method in Python is used to remove or delete a file path. This method can not remove or delete a directory. If the specified path is a directory then OSError will be raised by the method.

Syntax of os.remove()

Syntax: os.remove(path, *, dir_fd = None) 

Parameter: path: A path-like object representing a file path. A path-like object is either a string or bytes object representing a path. 

  • dir_fd (optional): A file descriptor referring to a directory. The default value of this parameter is None. If the specified path is absolute then dir_fd is ignored. 

Note: The ‘*’ in parameter list indicates that all following parameters (Here in our case ‘dir_fd’) are keyword-only parameters and they can be provided using their name, not as positional parameter. 

Return Type: This method does not return any value.

Example 1: Delete a File in Python

Suppose the file contained in the folder are: 

We want to delete file1 from the above folder. Below is the implementation. 

Python3

import os

file = 'file1.txt'

location = "D:/Pycharm projects/GeeksforGeeks/Authors/Nikhil/"

path = os.path.join(location, file)

os.remove(path)

Output: 

Example 2: Remove file with absolute path

If the specified path is a directory. 

Python3

import os

dir = "Nikhil"

location = "D:/Pycharm projects/GeeksforGeeks/Authors/"

path = os.path.join(location, dir)

os.remove(path)

print("% s has been removed successfully" % dir)

Output:

Traceback (most recent call last):
  File "osremove.py", line 11, in 
    os.remove(path)
IsADirectoryError: [Errno 21] Is a directory: 'D:/Pycharm projects/GeeksforGeeks/Authors/Nikhil'

Example 3: Check if File Exists Before Deleting

Handling error while using os.remove() method.

Python3

import os

path = 'D:/Pycharm projects/GeeksforGeeks/Authors/Nikhil'

try:

    os.remove(path)

    print("% s removed successfully" % path)

except OSError as error:

    print(error)

    print("File path can not be removed")

Output:

[Errno 21] Is a directory: 'D:/Pycharm projects/GeeksforGeeks/Authors/Nikhil'
File path can not be removed

Note: To know more about os.remove() click here.

Deleting file/dir using the os.rmdir() method

os.rmdir() method in Python is used to remove or delete an empty directory. OSError will be raised if the specified path is not an empty directory.

Syntax of os.rmdir()

Syntax: os.rmdir(path, *, dir_fd = None) 

Parameter: 

  • path: A path-like object representing a file path. A path-like object is either a string or bytes object representing a path. 
  • dir_fd (optional): A file descriptor referring to a directory. The default value of this parameter is None. If the specified path is absolute then dir_fd is ignored. 

Note: The ‘*’ in parameter list indicates that all following parameters (Here in our case ‘dir_fd’) are keyword-only parameters and they can be provided using their name, not as positional parameter. 

Return Type: This method does not return any value.

Example 1: Delete all directories from a Directory

Suppose the directories are – 

We want to remove the directory Geeks. Below is the implementation. 

Python3

import os

directory = "Geeks"

parent = "D:/Pycharm projects/"

path = os.path.join(parent, directory)

os.rmdir(path)

Output: 

Example 2: Error Handling while deleting a directory

Handling errors while using os.rmdir() method, 

Python3

import os

directory = "GeeksforGeeks"

parent = "D:/Pycharm projects/"

path = os.path.join(parent, directory)

try:

    os.rmdir(path)

    print("Directory '% s' has been removed successfully" % directory)

except OSError as error:

    print(error)

    print("Directory '% s' can not be removed" % directory)

Output:

[WinError 145] The directory is not empty: 'D:/Pycharm projects/GeeksforGeeks'
Directory 'GeeksforGeeks' can not be removed

Note: To know more about os.rmdir() click here.

Deleting file/dir using the shutil.rmtree()

shutil.rmtree() is used to delete an entire directory tree, a path must point to a directory (but not a symbolic link to a directory).

Syntax of shutil.rmtree()

Syntax: shutil.rmtree(path, ignore_errors=False, onerror=None) 

Parameters: 

  • path: A path-like object representing a file path. A path-like object is either a string or bytes object representing a path. 
  • ignore_errors: If ignore_errors is true, errors resulting from failed removals will be ignored. 
  • onerror: If ignore_errors is false or omitted, such errors are handled by calling a handler specified by onerror.

Delete a directory and the files contained in it.

Example 1: 

Suppose the directory and sub-directories are as follow.

 # Parent directory: 

 # Directory inside parent directory: 

# File inside the sub-directory: 

Example: Delete all Files from a Directory

We want to remove the directory Authors. Below is the implementation. 

Python3

import shutil

import os

location = "D:/Pycharm projects/GeeksforGeeks/"

dir = "Authors"

path = os.path.join(location, dir)

shutil.rmtree(path)

Output: 

Example 2: Ignore error while deleting a directory

By passing ignore_errors = True. 

Python3

import shutil

import os

location = "D:/Pycharm projects/GeeksforGeeks/"

dir = "Authors"

path = os.path.join(location, dir)

shutil.rmtree(path, ignore_errors=False)

Output:

Traceback (most recent call last): File “D:/Pycharm projects/gfg/gfg.py”, line 16, in shutil.rmtree(path, ignore_errors=False) File “C:UsersNikhil AggarwalAppDataLocalProgramsPythonPython38-32libshutil.py”, line 730, in rmtree return _rmtree_unsafe(path, onerror) File “C:UsersNikhil AggarwalAppDataLocalProgramsPythonPython38-32libshutil.py”, line 589, in _rmtree_unsafe onerror(os.scandir, path, sys.exc_info()) File “C:UsersNikhil AggarwalAppDataLocalProgramsPythonPython38-32libshutil.py”, line 586, in _rmtree_unsafe with os.scandir(path) as scandir_it: FileNotFoundError: [WinError 3] The system cannot find the path specified: ‘D:/Pycharm projects/GeeksforGeeks/Authors’

Example 3: Exception handler

In onerror a function should be passed which must contain three parameters.

  • function – function which raised the exception.
  • path – path name passed which raised the exception while removal
  • excinfo – exception info raised by sys.exc_info()

Below is the implementation 

Python3

import shutil

import os

def handler(func, path, exc_info):

    print("Inside handler")

    print(exc_info)

location = "D:/Pycharm projects/GeeksforGeeks/"

dir = "Authors"

path = os.path.join(location, dir)

shutil.rmtree(path, onerror=handler)

Output:

Inside handler (, FileNotFoundError(2, ‘The system cannot find the path specified’), ) Inside handler (, FileNotFoundError(2, ‘The system cannot find the file specified’), )

Deleting file/dir using the pathlib.Path(empty_dir_path).rmdir()

An empty directory can also be removed or deleted using the pathlib module’s rmdir() method. First, we have to set the path for the directory, and then we call the rmdir() method on that path

Syntax of pathlib.Path

Syntax: pathlib.Path(empty_dir_path).rmdir()

Parameter: 

  • empty_dir_path: A path-like object representing a empty directory path. A path-like object is either a string or bytes object representing a path. 

Return Type: This method does not return any value.

Example: Delete an Empty Directory using rmdir()

In this example, we will delete an empty folder, we just need to specify the folder name if it is in the root Directory

Python3

import pathlib

empty_dir = r"Untitled Folder"

path = pathlib.Path(empty_dir).rmdir()

print("Deleted '%s' successfully" % empty_dir)

Output:

Deleted 'Untitled Folder' successfully

Спектр применения различных файлов огромен. Именно поэтому умение их удалять — важный навык. С помощью 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 удалена.

idontgetit

python

  • Python

Значит использую библиотеку os

Пример кода:

import os 
dir_path = 'photo/'
os.remove(dir_path)

Выдаёт ошибку

PermissionError: [WinError 5] Отказано в доступе: 'photo/'

Примечательно то, что подобный код прекрасно работал, а потом с того ни с сего стала появляться эта ошибка. Гуглил, но предлагаемые решения не помогли


  • Вопрос задан

    более двух лет назад

  • 1137 просмотров



4

комментария

  • fox_12

    Гуглил, но предлагаемые решения не помогли

    а что пробовали, собственно?

    И какая часть ошибки собственно непонятна?:

    PermissionError: [WinError 5] Отказано в доступе: ‘photo/’

  • idontgetit

    Владимир Куц, Отключал антивирусы, искал возможные процессы, которые могли бы взаимодействовать с файлами папки, даже перезагрузку делал, чтобы закрыть процессы наверняка.

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

  • fox_12

  • LazyTalent

Пригласить эксперта


Ответы на вопрос 2

shurshur

os.rmdir('photo')

os.remove не работает с каталогами.

  • shurshur

    PS: Хотя в этом случае было бы IsADirectoryError, а не PermissionError. Скорее всего на этапе проверки прав не работает.

  • idontgetit

    так я и не удаляю папку. Я удаляю файлы в папке через remove

  • shurshur

    Дмитрий, так os.remove не умеет рекурсивное удаление. Документация. И тут уже предлагали проверить, не залочен ли каталог каким-то процессом — даже в доке написано, что под Windows это вызывает проблемы.

SoreMix

soremix

@SoreMix Куратор тега Python

yellow

os.remove() удаляет файл.
Для работы с директориями есть os.rmdir()

  • idontgetit

    Так мне и нужно удалять файлы в папке, а не саму папку.

  • SoreMix

    soremix

    @SoreMix Куратор тега Python

    Дмитрий, где файлы вы удаляете?

    'photo/'

  • idontgetit

    SoreMix, Пусть так:

    dir_path = listdir('photo') # из папки получаю список из названий jpg файлов (1.jpg, 2.jpg и тк)
    for i in dir_path:
        os.remove(i) # Пытаюсь удалить файлы поочередно

    Выдаёт ошибку: [WinError 2] Не удается найти указанный файл: ‘1.jpg’, хотя i равен следующим элементам списка: [‘1.jpg’, ‘2.jpg’, ‘3.jpg’, ‘4.jpg’, ‘5.jpg’, ‘6.jpg’, ‘7.jpg’, ‘8.jpg’, ‘9.jpg’]

  • idontgetit

    SoreMix, хотя я кажется понял что упустил

  • idontgetit

    SoreMix, Да, такой метод удаляет файлы. Забыл добавить os.remove('photo/'+ i)

  • idontgetit

    SoreMix, Но странно больше то, что именно через

    dir_path = 'photo/'
    os.remove(dir_path)

    Поначалу всё работало без ошибок. То есть, если я правильно понимаю, в переменной dir_path я говорю, что нужно удалить содержимое папки photo, разве нет?

  • SoreMix

    soremix

    @SoreMix Куратор тега Python


Похожие вопросы


  • Показать ещё
    Загружается…

10 февр. 2023, в 02:20

3000 руб./за проект

10 февр. 2023, в 01:33

1500 руб./за проект

10 февр. 2023, в 00:54

2000 руб./в час

Минуточку внимания

I’m receiving the below error when attempting to use os.remove() if a directory is found to exist. I’ve seen suggestions of running the script in an admin command prompt, that did not help. Relevant code snippet is also below.
Any help with understanding why this is happening is much appreciated!

Error:

Traceback (most recent call last): File "C:UsersREMOVEDPython AppsMy Progstest5.py", line 38, in <module> os.remove(final_dest) PermissionError: [WinError 5] Access is denied: 'C:\Users\REMOVED\Python Apps\My Progs\test_folder\test_folder'
final_dest = os.path.join(dest, basename)
if os.path.exists(final_dest):
    os.remove(final_dest)
    os.mkdir(final_dest)
else:
    os.mkdir(final_dest)

Posts: 1,523

Threads: 3

Joined: Mar 2020

Reputation:
163

Aug-28-2020, 08:55 PM
(This post was last modified: Aug-28-2020, 09:13 PM by bowlofred.)

If you have a file, you can remove just that file with os.remove() or os.unlink(). Similar to /bin/rm, this function fails on directories.

If you have a (empty) directory, you can remove it with os.rmdir(). Similar to /bin/rmdir.

If you have a path and want it and everything underneath it removed if possible, you can do so with shutil.rmtree(). Similar to /bin/rm -r.


Also, older documentation stated that os.remove() would throw an OSError if it were handed a directory. Newer documentation states flatly that it now throws a IsADirectoryError. But it looks like that may be OS dependent. I do see the newer error on Linux, but I don’t on MacOS (which still throws OSError, even on 3.8). I’m guessing that Windows does the same, but I can’t test that immediately.

Linux/Python 3.7.4

>>> os.remove("dir")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IsADirectoryError: [Errno 21] Is a directory: 'dir'

MacOS/Python 3.8.2

>>> os.remove("dir")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
PermissionError: [Errno 1] Operation not permitted: 'dir'

Posts: 37

Threads: 11

Joined: Jul 2020

Reputation:
0

Thank you for the explanation. shutil.rmtree() works great.

So the os module isn’t capable to deleting a directory with contents?

Posts: 1,523

Threads: 3

Joined: Mar 2020

Reputation:
163

Most (all?) things in «os» are access to the operating system functions rather than implemented in python. So yes, you’re correct. unlink() is the OS call to remove a file and it often fails when handed a directory. Python isn’t really doing anything here other than handing the structure over to the OS and handing back any success/failure information.

You can delete files from your computer using Python. The os.remove() method deletes single Python files. os.rmdir() removes a file or a directory. The shutil.rmtree() method will delete a directory and the files contained in it.


Developers use files in Python programs for a wide array of purposes. When you’re working with files, one of the most crucial functions you need to know about is how to delete a file.

For instance, let’s say you’re creating a program that analyzes the performance of the S&P 500 index and stores the results in a file. You may want to delete any existing analysis files to make room for the new file.

In Python, you can use the os.remove() method to remove files, and the os.rmdir() method to delete an empty folder. If you want to delete a folder with all of its files, you can use the shutil.rmtree() method.

This tutorial will discuss how to remove Python files and folders using os.remove(), os.rmdir(), and shutil.rmtree(). We’ll also go through an example of each of these methods being used to delete a file or folder.

Python Delete File Tutorial

You can delete files using the Python os.remove(), os.rmdir(), and shutil.rmtree() method. These methods remove a file, a directory, and a folder with all of its files, respectively.

How to Delete a File in Python Using os.remove()

The Python os.remove() method deletes a file from your operating system. os.remove() only deletes a single file. It cannot delete a directory.

The os module allows developers to interface with the operating and file systems of a computer. os.remove() is a method included in the Python os module that allows you to delete an individual file.

Before we start working with these methods, we need to import the os library using a Python import statement.

The os library facilitates interactions with the operating system in Python. We can do so using the following code:

Now we’re ready to start removing files in Python the os.remove() module in Python. Let’s look at the syntax for the os.remove() path method:

import os

os.remove(file_location)

The os.remove() method takes one parameter: the location of the file you want to delete.

Let’s say we are creating a program that analyzes the grades earned by students in a math class over the course of a year.

We want to create a file called /home/school/math/final_analysis.csv with our analyzed data. But, before our program creates that file, we first need to make sure it does not already exist.

We could use the following code to remove this file:

import os

path = "/home/school/math/final_analysis.csv"

os.remove(path)

print("final_analysis.csv has been deleted.")

Our file has been removed. We printed the following message has been printed to the console using a Python print() statement:

final_analysis.csv has been deleted.

On the first line, we import the os module, which contains the os.remove() method that we want to reference in our program. Then, we define a Python variable called path. This variable stores the file path for the file we want to remove.

We then use os.remove() and specify our path variable as the file path, which will remove our file.

Delete Empty Directory Using Python os.rmdir()

The os.remove() method cannot be used to delete a folder. Instead, we can use the os.rmdir() method. The os.rmdir() method is used to delete an empty file or directory.

os.rmdir() accepts one parameter: the path of the file you want to delete. Here’s the syntax for the os.rmdir() method:

import os

os.rmdir(file_path)

Let’s say that we have decided to store our processed data in a folder called final within our /home/school/math directory. Every time we run our program, we want to remove the final folder directory. This is because our program will create a new one with the processed data.

We could use the following code to remove the final folder:

import os

path = "/home/school/math/final"

os.rmdir(path)

print("/home/school/math/final has been deleted.")

Our code deletes the directory /home/school/math/final and returns the following message to the console:

/home/school/math/final has been deleted.

The os.rmdir() method can only be used to delete an empty directory. If you specify a folder that contains files, the following error will be returned:

[Errno 13] Permission denied: '/home/school/math/final' Directory 'final' can not be removed

Python os Error Handling

In the above examples, we have stated that, in some cases, a permission error can be returned by an argument. If we use os.remove() to remove a directory, an error will be returned. If we use os.rmdir() to remove a directory that contains files, an error will be returned.

When you’re deleting files in a program, you may want to have a function that handles your errors gracefully if an error arises. We can do this using a try except block.

Here’s our example of the os.rmdir() method above, but with an error-handling mechanism that will print a predefined message if exceptions are raised:

Venus profile photo

«Career Karma entered my life when I needed it most and quickly helped me match with a bootcamp. Two months after graduating, I found my dream job that aligned with my values and goals in life!»

Venus, Software Engineer at Rockbot

import os

path = "/home/school/math/final"

try:
	os.rmdir(path)
	print("/home/school/math/final has been deleted.")
except OSError as error:
	print("There was an error.")

Now, if we run our code and no error is returned, our directory will be removed and the following message will be returned:

/home/school/math/final has been deleted.

However, if we run our code and try to remove a directory that contains files, for example, the following message will be returned:

In our code, we used a try except block. This procedure first runs the lines of code within the try block. If an error is encountered, it will run the code within the except block. In this case, the except block will only be executed if an OSError is raised.

If you want to learn more about error handling using try except blocks in Python, read our tutorial on Python try except.

Delete File Python with Directories

The shutil library includes a method called shutil.rmtree() that can be used to remove a directory that contains files.

The shutil library offers a number of functions related to file operations. In our case, we want to focus on the shutil.rmtree() method, which removes an entire directory tree.

Here’s the syntax for the shutil.rmtree() method:

import shutil

shutil.rmtree(file_path)

Notice that we have imported the shutil module in our code. That is because shutil.rmtree() is part of an external library, like os.remove(), so we need to import the library before we can use it.

Let’s walk through an example to show how this method can be used. Say that our grade analysis program needs to remove the directory final, but that directory already includes files with our processed data. To remove the directory and all of its files, we could use the following code:

import shutil

path = "/home/school/math/final"

shutil.rmtree(path)

print("/home/school/math/final has been removed.")

Our code removes the folder final and all its contents, then prints the following message to the console:

/home/school/math/final has been removed.

Conclusion

Removing files is a common operation in Python. The os.remove() method can be used to delete a specific file, and the os.rmdir() method can be used to remove an empty directory. In addition, you can use the shutil.rmtree() method to delete a folder that contains one or more files.

To learn more about coding in Python, read our complete guide on How to Learn Python.

Понравилась статья? Поделить с друзьями:
  • Python messagebox error
  • Python memory error stack overflow
  • Python memory error out of memory
  • Python math domain error sqrt
  • Python make error