Saya mengalami masalah dengan menghapus direktori kosong. Ini kode saya:
for dirpath, dirnames, filenames in os.walk(dir_to_search):
//other codes
try:
os.rmdir(dirpath)
except OSError as ex:
print(ex)
Argumennya dir_to_search
adalah di mana saya melewati direktori di mana pekerjaan harus dilakukan. Direktori itu terlihat seperti ini:
test/20/...
test/22/...
test/25/...
test/26/...
Perhatikan bahwa semua folder di atas kosong. Ketika saya menjalankan script ini folder 20
, 25
sendiri akan dihapus! Tetapi folder 25
dan 26
tidak dihapus, meskipun mereka folder kosong.
Edit:
Pengecualian yang saya dapatkan adalah:
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/26'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/25'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27/tmp'
Di mana saya membuat kesalahan?
rmdir /path/to/25th/folder
menghapus seluruh direktori. Yang berarti direktori itu adalah yang kosong!Jawaban:
Coba
shutil.rmtree
:sumber
rmtree
seluruh direktori dihapus? Saya kira itu mirip dengan salah saturm -Rf $DIR
import os for root, dirs, files in os.walk(top, topdown=False): for name in dirs: os.rmdir(os.path.join(root, name))
Perilaku default
os.walk()
adalah berjalan dari akar ke daun. Settopdown=False
dios.walk()
berjalan dari daun ke akar.sumber
Ini
pathlib
penghapus tautan direktori rekursif murni saya :sumber
Coba
rmtree()
dishutil
dari Python perpustakaan standarsumber
rmtree
seluruh direktori dihapus? Saya kira itu mirip dengan salah saturm -Rf $DIR
lebih baik menggunakan path absolut dan hanya mengimpor fungsi rmtree
from shutil import rmtree
karena ini adalah paket besar, baris di atas hanya akan mengimpor fungsi yang diperlukan.sumber
rmtree()
; tidakshutil.rmtree()
Hanya untuk orang berikutnya yang mencari solusi micropython, ini berfungsi murni berdasarkan os (listdir, hapus, rmdir). Itu tidak lengkap (terutama dalam penanganan kesalahan) atau mewah, namun akan berfungsi dalam sebagian besar keadaan.
sumber
Perintah (diberikan oleh Tomek) tidak dapat menghapus file, jika hanya dibaca . oleh karena itu, seseorang dapat menggunakan -
sumber
NameError: name 'stat' is not defined
. Bagaimana cara mendefinisikannya?Inilah solusi murni-pathlib lain , tetapi tanpa rekursi:
sumber
Berikut ini adalah solusi rekursif:
sumber
Untuk pengguna Linux, Anda cukup menjalankan perintah shell dengan cara pythonic
di mana
rm
singkatan menghapus dan-r
untuk rekursifsumber