Ich möchte alle Dateien mit der Erweiterung .bak
in einem Verzeichnis löschen . Wie kann ich das in Python machen?
shutil.rmtree(path)
kann verwendet werden .
Ich möchte alle Dateien mit der Erweiterung .bak
in einem Verzeichnis löschen . Wie kann ich das in Python machen?
shutil.rmtree(path)
kann verwendet werden .
Antworten:
Über os.listdir
und 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))
Oder über glob.glob
:
import glob, os, os.path
filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
os.remove(f)
Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden und eventuell verwenden os.chdir
.
Verwenden Sie os.chdir
diese Option , um das Verzeichnis zu wechseln. Verwenden glob.glob
Sie diese Option, um eine Liste mit Dateinamen zu erstellen, die mit '.bak' enden. Die Elemente der Liste sind nur Zeichenfolgen.
Dann können Sie os.unlink
die Dateien entfernen. (PS. os.unlink
Und os.remove
sind Synonyme für die gleiche Funktion.)
#!/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)
In Python 3.5 os.scandir
ist es besser, wenn Sie nach Dateiattributen oder -typen suchen müssen - siehe os.DirEntry
Eigenschaften des Objekts, das von der Funktion zurückgegeben wird.
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
Dies erfordert auch kein Ändern der Verzeichnisse, da jedes DirEntry
bereits den vollständigen Pfad zur Datei enthält.
if file.name.endswith(".bak"):
Sie können eine Funktion erstellen. Fügen Sie maxdepth hinzu, wie Sie möchten, um Unterverzeichnisse zu durchlaufen.
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")
Erst global , dann Verknüpfung aufheben .
Unter Linux und MacOS können Sie einen einfachen Befehl für die Shell ausführen:
subprocess.run('rm /tmp/*.bak', shell=True)
Mir ist klar, dass das alt ist; Hier erfahren Sie jedoch, wie Sie dies nur mit dem OS-Modul tun können ...
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))