Bagaimana cara menghapus file atau folder dengan Python?
python
file-io
directory
delete-file
Zygimantas
sumber
sumber
os.remove()
pengecualian, jadi mungkin perlu untuk memeriksaos.path.isfile()
dulu, atau membungkusnya dengantry
.os.remove()
jika file tidak ada adalahFileNotFoundError
.os.remove()
diperlukan beberapa argumen untuk menghapus banyak file, atau Anda menyebutnya setiap kali untuk setiap file?Sintaks Python untuk menghapus file
Atau
Atau
pathlib Library untuk versi Python> 3.5
Path.unlink (missing_ok = Salah)
Metode unlink digunakan untuk menghapus file atau tautan simbolik.
Praktek terbaik
a.
os.path.isfile("/path/to/file")
b. Menggunakan
exception handling.
CONTOH untuk
os.path.isfile
Penanganan Eksepsi
OUTPUT RESPEKTIF
Sintaks Python untuk menghapus folder
Contoh untuk
shutil.rmtree()
sumber
Menggunakan
(Lihat dokumentasi lengkap tentang shutil ) dan / atau
dan
(Dokumentasi lengkap di os .)
sumber
Berikut adalah fungsi yang kuat yang menggunakan keduanya
os.remove
danshutil.rmtree
:sumber
remove(path);
panggilan ISO C.os.path.islink(file_path):
bug, harusos.path.islink(path):
Anda dapat menggunakan built-in
pathlib
modul (membutuhkan Python 3.4+, tetapi ada backports untuk versi yang lebih tua di PyPI:pathlib
,pathlib2
).Untuk menghapus file ada
unlink
metode:Atau
rmdir
metode untuk menghapus folder kosong :sumber
pathlib
yang dapat menangani menghapus direktori yang tidak kosong. Namun Anda bisa menggunakannyashutil.rmtree
. Itu telah disebutkan dalam beberapa jawaban lain jadi saya belum memasukkannya.Untuk Python 3, untuk menghapus file dan direktori secara individual, gunakan metode
unlink
dan objek masing-masing:rmdir
Path
Perhatikan bahwa Anda juga dapat menggunakan jalur relatif dengan
Path
objek, dan Anda dapat memeriksa direktori kerja Anda saat ini denganPath.cwd
.Untuk menghapus file dan direktori individual di Python 2, lihat bagian yang berlabel di bawah ini.
Untuk menghapus direktori dengan konten, gunakan
shutil.rmtree
, dan perhatikan bahwa ini tersedia dalam Python 2 dan 3:Demonstrasi
Baru dalam Python 3.4 adalah
Path
objek.Mari kita gunakan satu untuk membuat direktori dan file untuk menunjukkan penggunaan. Perhatikan bahwa kami menggunakan
/
untuk bergabung dengan bagian-bagian jalan, ini mengatasi masalah antara sistem operasi dan masalah dari penggunaan backslash pada Windows (di mana Anda perlu menggandakan backslash Anda seperti\\
atau menggunakan string mentah, sepertir"foo\bar"
):dan sekarang:
Sekarang mari kita hapus. Pertama file:
Kita dapat menggunakan globbing untuk menghapus banyak file - pertama mari kita buat beberapa file untuk ini:
Kemudian hanya mengulangi pola glob:
Sekarang, menunjukkan penghapusan direktori:
Bagaimana jika kita ingin menghapus direktori dan semua yang ada di dalamnya? Untuk kasus penggunaan ini, gunakan
shutil.rmtree
Mari kita buat kembali direktori dan file kita:
dan perhatikan bahwa
rmdir
gagal kecuali itu kosong, itulah sebabnya rmtree sangat nyaman:Sekarang, impor rmtree dan kirimkan direktori ke funtion:
dan kita bisa melihat semuanya telah dihapus:
Python 2
Jika Anda menggunakan Python 2, ada backport dari modul pathlib bernama pathlib2 , yang dapat diinstal dengan pip:
Dan kemudian Anda bisa alias perpustakaan untuk
pathlib
Atau langsung saja mengimpor
Path
objek (seperti yang ditunjukkan di sini):Jika terlalu banyak, Anda dapat menghapus file dengan
os.remove
atauos.unlink
atau
dan Anda dapat menghapus direktori dengan
os.rmdir
:Perhatikan bahwa ada juga
os.removedirs
- hanya menghapus direktori kosong secara rekursif, tetapi mungkin sesuai dengan kasus penggunaan Anda.sumber
rmtree(directory_path)
bekerja dalam python 3.6.6 tetapi tidak dalam python 3.5.2 - Anda perlu dirmtree(str(directory_path)))
sanasumber
shutil.rmtree adalah fungsi asinkron, jadi jika Anda ingin memeriksa kapan itu selesai, Anda dapat menggunakan while ... loop
sumber
shutil.rmtree
tidak seharusnya tidak sinkron. Namun, ini mungkin tampak berada di Windows dengan pemindai virus mengganggu.Untuk menghapus file:
atau
Kedua fungsi secara semantik sama. Fungsi ini menghapus (menghapus) jalur file. Jika path bukan file dan itu adalah direktori, maka pengecualian dimunculkan.
Untuk menghapus folder:
atau
Untuk menghapus seluruh pohon direktori,
shutil.rmtree()
dapat digunakan.os.rmdir
hanya berfungsi ketika direktori kosong dan ada.Untuk menghapus folder secara rekursif ke arah induk:
Itu menghapus setiap direktori induk kosong dengan diri sampai induk yang memiliki beberapa konten
Untuk info lebih lanjut cek doc resmi:
os.unlink
,os.remove
,os.rmdir
,shutil.rmtree
,os.removedirs
sumber
Untuk menghapus semua file di folder
Untuk menghapus semua folder dalam direktori
sumber
Untuk menghindari masalah TOCTOU yang disorot oleh komentar Éric Araujo , Anda dapat menangkap pengecualian untuk memanggil metode yang benar:
Karena
shutil.rmtree()
hanya akan menghapus direktori danos.remove()
atauos.unlink()
hanya akan menghapus file.sumber
shutil.rmtree()
menghapus tidak hanya direktori tetapi juga isinya.Saya sarankan menggunakan
subprocess
jika menulis kode yang indah dan mudah dibaca adalah secangkir teh Anda:Dan jika Anda bukan seorang insinyur perangkat lunak, maka mungkin pertimbangkan untuk menggunakan Jupyter; Anda cukup mengetik perintah bash:
Secara tradisional, Anda menggunakan
shutil
:sumber
subprocess
ini.shutil.rmtree
melakukanrm -r
pekerjaan dengan baik, dengan bonus tambahan bekerja di Windows.