Удаление файла или папки

Как удалить файл или папку в Python?

10 ответов


os.remove() удаляет файл.

os.rmdir() удаляет пустой каталог.

shutil.rmtree() удалить каталог и все его содержимое.

pathlib.Path.unlink() удаляет файл или символическую ссылку.

pathlib.Path.rmdir() удаляет пустой каталог.


синтаксис Python для удаления файла

import os
os.remove("/tmp/<file_name>.txt")

или

import os
os.unlink("/tmp/<file_name>.txt")

лучшие практики

  1. сначала проверьте, существует ли файл или папка или нет, а затем удалите только этот файл. Это может быть достигнуто двумя способами :
    a. os.path.isfile("/path/to/file")
    b. Использовать exception handling.

пример for os.path.isfile

#!/usr/bin/python
import os
myfile="/tmp/foo.txt"

## If file exists, delete it ##
if os.path.isfile(myfile):
    os.remove(myfile)
else:    ## Show an error ##
    print("Error: %s file not found" % myfile)

Обработка Исключений

#!/usr/bin/python
import os

## Get input ##
myfile= raw_input("Enter file name to delete: ")

## Try to delete the file ##
try:
    os.remove(myfile)
except OSError as e:  ## if failed, report it back to the user ##
    print ("Error: %s - %s." % (e.filename, e.strerror))

соответственно Вывод

Enter file name to delete : demo.txt
Error: demo.txt - No such file or directory.

Enter file name to delete : rrr.txt
Error: rrr.txt - Operation not permitted.

Enter file name to delete : foo.txt

синтаксис Python для удаления папки

shutil.rmtree()

пример shutil.rmtree()

#!/usr/bin/python
import os
import sys
import shutil

# Get directory name
mydir= raw_input("Enter directory name: ")

## Try to remove tree; if failed show an error using try...except on screen
try:
    shutil.rmtree(mydir)
except OSError as e:
    print ("Error: %s - %s." % (e.filename, e.strerror))

использовать

shutil.rmtree(path[, ignore_errors[, onerror]])

(см. полную документацию на shutil) и/или

os.remove

и

os.rmdir

(полная документация о os.)


для удаления файлов:

можно использовать unlink или remove.

os.unlink(path, *, dir_fd=None)

или

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

эта функция удаляет (удаляет) путь к файлу. Если путь является каталогом, OSError поднимается.

в Python 2, Если путь не существует, OSError С [Errno 2] (ENOENT) поднимается. В Python 3, FileNotFoundError С [Errno 2] (ENOENT) поднимается. В Python 3, потому что FileNotFoundError - это подкласс OSError, поймав последний поймает первый.

для удаления папки:

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

rmdir удалить (удалить) путь к каталогу. Работает только тогда, когда каталог пуст, в противном случае,OSError поднимается. Чтобы удалить все деревья каталогов,shutil.rmtree() можно использовать.

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

shutil.rmtree удалить все дерево каталогов. Путь должен указывать на каталог (но не на символическую ссылку в каталог).

если ignore_errors имеет значение true, ошибки в результате неудачного удаления будут игнорироваться, а если false или опущено, такие ошибки обрабатываются вызовом обработчика, указанного onerror или, если это опущено, они вызывают исключение.

Читайте также:

os.removedirs(name)

os.removedirs(name) удалить каталоги рекурсивно. Работает как rmdir () за исключением того, что, если листовой каталог успешно удален, removedirs () пытается последовательно удалить каждый родительский каталог, упомянутый в path, пока не будет вызвана ошибка (которая игнорируется, потому что это обычно означает, что родительский каталог не пуст).

например, ОС.removedirs ('foo/bar/baz') сначала удалит каталог' foo/bar/baz', а затем удалите' foo/bar 'и' foo', если они пусты.


создать функции для вас.

def remove(path):
    """ param <path> could either be relative or absolute. """
    if os.path.isfile(path):
        os.remove(path)  # remove the file
    elif os.path.isdir(path):
        shutil.rmtree(path)  # remove dir and all contains
    else:
        raise ValueError("file {} is not a file or dir.".format(path))

вы можете использовать встроенный pathlib module (требуется Python 3.4+, но есть backports для более старых версий на PyPI:pathlib, pathlib2).

для удаления файла есть unlink способ:

import pathlib
path = pathlib.Path(name_of_file)
path.unlink()

или rmdir способ удалить пустой:

import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()

Как удалить файл или папку в Python?

для Python 3, чтобы удалить файл и папку по отдельности, используйте unlink и rmdir Path методы объекта соответственно:

from pathlib import Path
dir_path = Path.home() / 'directory' 
file_path = dir_path / 'file'

file_path.unlink() # remove file

dir_path.rmdir()   # remove directory

обратите внимание, что вы также можете использовать относительные пути с Path объекты, и вы можете проверить свой текущий рабочий каталог с Path.cwd.

для удаления отдельных файлов и каталогов в Python 2, см. раздел так обозначенный ниже.

чтобы удалить каталог с содержимым, используйте shutil.rmtree и обратите внимание, что это возможно в Python 2 и 3:

from shutil import rmtree

rmtree(dir_path)

демонстрация

новое в Python 3.4-это


shutil.rmtree-асинхронная функция, поэтому, если вы хотите проверить, когда он будет завершен, вы можете использовать while...петля

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')

import os

folder = '/Path/to/yourDir/'
fileList = os.listdir(folder)

for f in fileList:
    filePath = folder + '/'+f

    if os.path.isfile(filePath):
        os.remove(filePath)

    elif os.path.isdir(filePath):
        newFileList = os.listdir(filePath)
        for f1 in newFileList:
            insideFilePath = filePath + '/' + f1

            if os.path.isfile(insideFilePath):
                os.remove(insideFilePath)

я рекомендую использовать subprocess если писать красивый и читаемый код ваша чашка чая:

import subprocess
subprocess.Popen("rm -r my_dir", shell=True)

и если вы не инженер-программист, то, возможно, рассмотрите использование Jupyter; вы можете просто ввести команды bash:

!rm -r my_dir

традиционно, вы используете shutil:

import shutil
shutil.rmtree(my_dir)