.bak
디렉토리 의 확장자 를 가진 모든 파일을 삭제하고 싶습니다 . 파이썬에서 어떻게 할 수 있습니까?
답변
경유 os.listdir
및 os.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.unlink
와 os.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))