Удаление файла или папки
Как удалить файл или папку в 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")
лучшие практики
- сначала проверьте, существует ли файл или папка или нет, а затем удалите только этот файл. Это может быть достигнуто двумя способами :
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))
для удаления файлов:
можно использовать 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)