python 파일 경로 - 파이썬으로 비어 있지 않은 폴더를 어떻게 제거 / 삭제합니까?





7 Answers

os.walk() 의 파이썬 문서 에서 :

# Delete everything reachable from the directory named in 'top',
# assuming there are no symbolic links.
# CAUTION:  This is dangerous!  For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))
텍스트 파싱 읽기

비어 있지 않은 폴더를 삭제하려고하면 '액세스가 거부되었습니다.'오류가 발생합니다. 내 시도에서 다음 명령을 사용했습니다 : os.remove("/folder_name") .

비어 있지 않은 폴더 / 디렉토리를 제거 / 삭제하는 가장 효과적인 방법은 무엇입니까?




python 3.4에서 다음을 사용할 수 있습니다 :

import pathlib

def delete_folder(pth) :
    for sub in pth.iterdir() :
        if sub.is_dir() :
            delete_folder(sub)
        else :
            sub.unlink()
    pth.rmdir() # if you just want to delete dir content, remove this line

여기서 pthpathlib.Path 인스턴스입니다. 좋지만 가장 빠를 수는 없습니다.




확실하다면 전체 dir 트리를 지우고 dir의 내용에 관심이 없으면 전체 dir 트리를 크롤링하는 것은 어리 석다 ... 파이썬에서 네이티브 OS 명령을 호출하면됩니다. 더 빠르고 효율적이며 적은 메모리를 소비합니다.

RMDIR c:\blah /s /q 

또는 * nix

rm -rf /home/whatever 

파이썬에서는 코드가 다음과 같이 보입니다.

import sys
import os

mswindows = (sys.platform == "win32")

def getstatusoutput(cmd):
    """Return (status, output) of executing cmd in a shell."""
    if not mswindows:
        return commands.getstatusoutput(cmd)
    pipe = os.popen(cmd + ' 2>&1', 'r')
    text = pipe.read()
    sts = pipe.close()
    if sts is None: sts = 0
    if text[-1:] == '\n': text = text[:-1]
    return sts, text


def deleteDir(path):
    """deletes the path entirely"""
    if mswindows: 
        cmd = "RMDIR "+ path +" /s /q"
    else:
        cmd = "rm -rf "+path
    result = getstatusoutput(cmd)
    if(result[0]!=0):
        raise RuntimeError(result[1])



docs.python.org :

이 예는 일부 파일에 읽기 전용 비트가 설정된 Windows에서 디렉토리 트리를 제거하는 방법을 보여줍니다. onerror 콜백을 사용하여 읽기 전용 비트를 지우고 제거를 다시 시도합니다. 이후의 실패는 전파됩니다.

import os, stat
import shutil

def remove_readonly(func, path, _):
    "Clear the readonly bit and reattempt the removal"
    os.chmod(path, stat.S_IWRITE)
    func(path)

shutil.rmtree(directory, onerror=remove_readonly)



shutil 모듈을 사용하고 싶지 않으면 os 모듈을 사용할 수 있습니다.

from os import listdir, rmdir, remove
for i in listdir(directoryToRemove):
    os.remove(os.path.join(directoryToRemove, i))
rmdir(directoryToRemove) # Now the directory is empty of files



단순화를 위해 os.system 명령을 사용할 수 있습니다.

import os
os.system("rm -rf dirname")

명백하게, 실제로이 작업을 수행하기 위해 시스템 터미널을 호출합니다.




Windows OS 에서 모든 폴더 (심지어 비어 있지 않음) 또는 파일을 삭제하는 매우 쉬운 방법을 발견했습니다.

os.system('powershell.exe  rmdir -r D:\workspace\Branches\*%s* -Force' %CANDIDATE_BRANCH)



Related


Tags

python   file