[python] Python을 사용하여 디렉토리의 모든 파일 삭제

.bak디렉토리 의 확장자 를 가진 모든 파일을 삭제하고 싶습니다 . 파이썬에서 어떻게 할 수 있습니까?



답변

경유 os.listdiros.remove:

import os

filelist = [ f for f in os.listdir(mydir) if f.endswith(".bak") ]
for f in filelist:
    os.remove(os.path.join(mydir, f))

또는 통해 glob.glob:

import glob, os, os.path

filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
    os.remove(f)

올바른 디렉토리에 있어야하며 결국을 사용하십시오 os.chdir.


답변

os.chdir디렉토리를 변경하는 데 사용 합니다. glob.glob‘.bak’로 끝나는 파일 이름 목록을 생성하는 데 사용하십시오 . 리스트의 요소는 단지 문자열입니다.

그런 다음 os.unlink파일을 제거하는 데 사용할 수 있습니다 . (PS. os.unlinkos.remove같은 기능의 동의어입니다.)

#!/usr/bin/env python
import glob
import os
directory='/path/to/dir'
os.chdir(directory)
files=glob.glob('*.bak')
for filename in files:
    os.unlink(filename)


답변

Python 3.5에서는 os.scandir파일 속성이나 유형을 확인해야하는 경우에 더 좋습니다 os.DirEntry. 함수가 반환하는 객체의 속성을 참조하십시오 .

import os

for file in os.scandir(path):
    if file.name.endswith(".bak"):
        os.unlink(file.path)

또한 디렉토리 DirEntry에 파일의 전체 경로가 이미 포함되어 있으므로 디렉토리를 변경할 필요가 없습니다 .


답변

함수를 만들 수 있습니다. 하위 디렉토리를 탐색 할 때 원하는대로 maxdepth를 추가하십시오.

def findNremove(path,pattern,maxdepth=1):
    cpath=path.count(os.sep)
    for r,d,f in os.walk(path):
        if r.count(os.sep) - cpath <maxdepth:
            for files in f:
                if files.endswith(pattern):
                    try:
                        print "Removing %s" % (os.path.join(r,files))
                        #os.remove(os.path.join(r,files))
                    except Exception,e:
                        print e
                    else:
                        print "%s removed" % (os.path.join(r,files))

path=os.path.join("/home","dir1","dir2")
findNremove(path,".bak")


답변

먼저 그들을 붙잡고 연결해제하십시오 .


답변

Linux 및 macOS에서는 쉘에 대한 간단한 명령을 실행할 수 있습니다.

subprocess.run('rm /tmp/*.bak', shell=True)


답변

나는 이것이 오래되었다는 것을 알고있다. 그러나 여기에 os 모듈 만 사용하는 방법이 있습니다 …

def purgedir(parent):
    for root, dirs, files in os.walk(parent):
        for item in files:
            # Delete subordinate files                                                 
            filespec = os.path.join(root, item)
            if filespec.endswith('.bak'):
                os.unlink(filespec)
        for item in dirs:
            # Recursively perform this operation for subordinate directories   
            purgedir(os.path.join(root, item))