Saya mendapatkan kesalahan 'akses ditolak' ketika saya mencoba menghapus folder yang tidak kosong. Saya menggunakan perintah berikut dalam usaha saya: os.remove("/folder_name")
.
Apa cara paling efektif untuk menghapus / menghapus folder / direktori yang tidak kosong?
rm -rf
perilaku tertentu, lihat: stackoverflow.com/questions/814167/…Jawaban:
Referensi Perpustakaan Standar: shutil.rmtree .
Secara desain,
rmtree
gagal pada pohon folder yang berisi file read-only. Jika Anda ingin folder dihapus tanpa memperhatikan apakah itu berisi file read-only, maka gunakansumber
rmtree
akan gagal jika ada file read-only: stackoverflow.com/questions/2656322/…Dari dokumen python pada
os.walk()
:sumber
sumber
ignore_errors=True
memecahkan masalah.onerror
parameter yang digunakan bukanignore_errors
. Dengan cara ini, file hanya baca dihapus daripada diabaikan.rmtree()
metode ini diabaikan.dari python 3.4 Anda dapat menggunakan:
dimana
pth
sebuahpathlib.Path
instance. Bagus, tapi mungkin bukan yang tercepat.sumber
Dari docs.python.org :
sumber
Jika ign_errors diatur, kesalahan diabaikan; jika tidak, jika onerror diset, ia dipanggil untuk menangani kesalahan dengan argumen (func, path, exc_info) di mana func adalah os.listdir, os.remove, atau os.rmdir; path adalah argumen untuk fungsi yang menyebabkannya gagal; dan exc_info adalah tuple yang dikembalikan oleh sys.exc_info (). Jika ignor_error salah dan onerror adalah Tidak ada, pengecualian akan dimunculkan kode enter.enter di sini
sumber
Berdasarkan jawaban kkubasik, periksa apakah folder ada sebelum dihapus, lebih kuat
sumber
try
menghapus dan menanganiexcept
daripada memanggilexists()
dulujika Anda yakin, bahwa Anda ingin menghapus seluruh pohon dir, dan tidak lagi tertarik pada isi dir, maka merangkak untuk seluruh pohon dir adalah kebodohan ... cukup panggil perintah OS asli dari python untuk melakukan itu. Ini akan lebih cepat, efisien dan lebih sedikit memakan memori.
atau * nix
Dengan python, kode akan terlihat seperti ..
sumber
shutil.rmdir
adalah untuk melindungi Anda dari jenis sistem operasi.Hanya beberapa opsi python 3.5 untuk menyelesaikan jawaban di atas. (Saya ingin sekali menemukannya di sini).
Hapus folder jika kosong
Hapus juga folder jika berisi file ini
hapus folder jika hanya berisi file .srt atau .txt
Hapus folder jika ukurannya kurang dari 400kb:
sumber
if files[0]== "desktop.ini" or:
Saya ingin menambahkan pendekatan "pure pathlib":
Ini bergantung pada fakta yang
Path
dapat dipesan, dan jalur yang lebih panjang akan selalu mengurutkan dari jalur yang lebih pendek, sama sepertistr
. Oleh karena itu, direktori akan datang sebelum file. Jika kita membalikkan pengurutan, file kemudian akan datang sebelum wadah masing-masing, sehingga kita dapat dengan mudah memutuskan tautan / rmdir mereka satu per satu dengan satu pass.Manfaat:
pathlib
dijanjikan dalam Python 3.6; tidak ada operasi di atas yang dinyatakan tidak berjalan pada Windows)sumber
sumber
Jika Anda tidak ingin menggunakan
shutil
modul, Anda bisa menggunakanos
modul.sumber
os.remove
tidak dapat menghapus direktori sehingga ini akan naikOsError
jikadirectoryToRemove
berisi subdirektori.Sepuluh tahun kemudian dan menggunakan Python 3.7 dan Linux masih ada beberapa cara untuk melakukan ini:
Pada dasarnya itu menggunakan modul subproses Python untuk menjalankan skrip bash
$ rm -rf '/path/to/your/dir
seolah-olah Anda menggunakan terminal untuk menyelesaikan tugas yang sama. Ini tidak sepenuhnya Python, tetapi bisa diselesaikan.Alasan saya memasukkan
pathlib.Path
contoh adalah karena dalam pengalaman saya itu sangat berguna ketika berhadapan dengan banyak jalur yang berubah. Langkah-langkah tambahan mengimporpathlib.Path
modul dan mengubah hasil akhir menjadi string sering kali lebih murah bagi saya untuk waktu pengembangan. Akan lebih mudah jikaPath.rmdir()
datang dengan opsi arg untuk secara eksplisit menangani direktori tidak kosong.sumber
rmtree
dan folder tersembunyi seperti.vscode
. Folder ini terdeteksi sebagai file teks dan kesalahannya memberi tahu saya bahwa file ini adalahbusy
dan tidak dapat dihapus.Untuk menghapus folder meskipun itu mungkin tidak ada (menghindari kondisi balapan dalam jawaban Charles Chow ) tetapi masih memiliki kesalahan ketika hal-hal lain salah (mis. Masalah izin, kesalahan baca disk, file bukan direktori)
Untuk Python 3.x:
Kode Python 2.7 hampir sama:
sumber
Dengan os.walk saya akan mengusulkan solusi yang terdiri dari 3 panggilan Python satu-liner:
Script pertama chmod's semua sub-direktori, script kedua chmod's semua file. Kemudian skrip ketiga menghapus semuanya tanpa halangan.
Saya telah menguji ini dari "Shell Script" di pekerjaan Jenkins (saya tidak ingin menyimpan skrip Python baru ke dalam SCM, itu sebabnya mencari solusi satu baris) dan itu bekerja untuk Linux dan Windows.
sumber
pathlib
, Anda dapat menggabungkan dua langkah pertama menjadi satu:[p.chmod(0o666) for p in pathlib.Path(_path_).glob("**/*")]
Anda dapat menggunakan perintah os.system untuk kesederhanaan:
Seperti yang sudah jelas, itu benar-benar memanggil terminal sistem untuk menyelesaikan tugas ini.
sumber
Saya telah menemukan cara yang sangat mudah untuk menghapus folder apa pun (Bahkan BUKAN Kosong) atau file di WINDOWS OS .
sumber
Untuk Windows, jika direktori tidak kosong, dan Anda memiliki file read-only atau Anda mendapatkan kesalahan
Access is denied
The process cannot access the file because it is being used by another process
Coba ini,
os.system('rmdir /S /Q "{}"'.format(directory))
Ini setara untuk
rm -rf
di Linux / Mac.sumber