Saya ingin menghapus semua file dengan ekstensi .bak
di direktori. Bagaimana saya bisa melakukannya dengan Python?
shutil.rmtree(path)
bisa digunakan .
Saya ingin menghapus semua file dengan ekstensi .bak
di direktori. Bagaimana saya bisa melakukannya dengan Python?
shutil.rmtree(path)
bisa digunakan .
Jawaban:
Via os.listdir
dan 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.chdir
untuk mengubah direktori. Gunakan glob.glob
untuk menghasilkan daftar nama file yang mengakhirinya '.bak'. Elemen daftar hanyalah string.
Maka Anda bisa menggunakan os.unlink
untuk menghapus file. (PS. os.unlink
Dan os.remove
merupakan 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.scandir
lebih baik jika Anda perlu memeriksa atribut atau tipe file - lihat os.DirEntry
properti 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 DirEntry
sudah 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))