Saya ingin menghapus semua file dengan ekstensi .bakdi direktori. Bagaimana saya bisa melakukannya dengan Python?
shutil.rmtree(path)bisa digunakan .
Saya ingin menghapus semua file dengan ekstensi .bakdi direktori. Bagaimana saya bisa melakukannya dengan Python?
shutil.rmtree(path)bisa digunakan .
Jawaban:
Via os.listdirdan 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))
Atau via glob.glob:
import glob, os, os.path
filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
os.remove(f)
Pastikan berada di direktori yang benar, akhirnya gunakan os.chdir.
Gunakan os.chdiruntuk mengubah direktori. Gunakan glob.globuntuk menghasilkan daftar nama file yang mengakhirinya '.bak'. Elemen daftar hanyalah string.
Maka Anda bisa menggunakan os.unlinkuntuk menghapus file. (PS. os.unlinkDan os.removemerupakan sinonim untuk fungsi yang sama.)
#!/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)
Dalam Python 3.5, os.scandirlebih baik jika Anda perlu memeriksa atribut atau tipe file - lihat os.DirEntryproperti objek yang dikembalikan oleh fungsi.
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
Ini juga tidak memerlukan perubahan direktori karena masing-masing DirEntrysudah menyertakan path lengkap ke file.
if file.name.endswith(".bak"):
Anda dapat membuat suatu fungsi. Tambahkan maxdepth sesuka Anda untuk melintasi subdirektori.
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")
Pertama, gabungkan mereka, lalu putuskan tautannya .
Di Linux dan macOS Anda dapat menjalankan perintah sederhana ke shell:
subprocess.run('rm /tmp/*.bak', shell=True)
Saya menyadari ini sudah tua; namun, berikut ini cara melakukannya dengan hanya menggunakan modul 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))