Pertanyaan Hapus file atau folder


Bagaimana cara menghapus file atau folder dengan Python?


1448
2017-08-09 13:05


asal


Jawaban:


os.remove() akan menghapus file.

os.rmdir() akan menghapus direktori kosong.

shutil.rmtree() akan menghapus direktori dan semua isinya.


2342
2017-08-09 13:07



Python sintaks untuk menghapus file

import os
os.remove("/tmp/<file_name>.txt")

Atau

import os
os.unlink("/tmp/<file_name>.txt")

Praktek terbaik

  1. Pertama, periksa apakah file atau folder tersebut ada atau tidak, kemudian hapus saja file itu. Ini dapat dicapai dengan dua cara:
    Sebuah. os.path.isfile("/path/to/file")
    b. Menggunakan exception handling.

CONTOH untuk os.path.isfile

#!/usr/bin/python
import os
myfile="/tmp/foo.txt"

## If file exists, delete it ##
if os.path.isfile(myfile):
    os.remove(myfile)
else:    ## Show an error ##
    print("Error: %s file not found" % myfile)

Penanganan Exception

#!/usr/bin/python
import os

## Get input ##
myfile= raw_input("Enter file name to delete: ")

## Try to delete the file ##
try:
    os.remove(myfile)
except OSError as e:  ## if failed, report it back to the user ##
    print ("Error: %s - %s." % (e.filename, e.strerror))

OUTPUT RESPEKTIF

Masukkan nama file untuk dihapus: demo.txt
Kesalahan: demo.txt - Tidak ada file atau direktori semacam itu.

Masukkan nama file untuk menghapus: rrr.txt
Kesalahan: rrr.txt - Operasi tidak diizinkan.

Masukkan nama file untuk menghapus: foo.txt

Python syntax untuk menghapus folder

shutil.rmtree()

Contoh untuk shutil.rmtree()

#!/usr/bin/python
import os
import sys
import shutil

# Get directory name
mydir= raw_input("Enter directory name: ")

## Try to remove tree; if failed show an error using try...except on screen
try:
    shutil.rmtree(mydir)
except OSError as e:
    print ("Error: %s - %s." % (e.filename, e.strerror))

101
2018-03-07 06:37



Menggunakan

shutil.rmtree(path[, ignore_errors[, onerror]])

(Lihat dokumentasi lengkap tentang shutil) dan / atau

os.remove

dan

os.rmdir

(Dokumentasi lengkap tentang os.)


61
2017-08-09 13:09



Untuk menghapus file:

Kamu dapat memakai unlink atau remove.

os.unlink(path, *, dir_fd=None)

Atau

os.remove(path, *, dir_fd=None)

Fungsi ini menghapus (menghapus) jalur file. Jika path adalah direktori, OSError dibesarkan.

Dalam Python 2, jika jalannya tidak ada, OSError dengan [Errno 2] (ENOENT) dibangkitkan. Dengan Python 3, FileNotFoundError dengan [Errno 2] (ENOENT) dibangkitkan. Dengan Python 3, karena FileNotFoundError adalah subkelas dari OSError, menangkap yang terakhir akan menangkap yang pertama.

Untuk menghapus folder:

os.rmdir(path, *, dir_fd=None)

rmdir Hapus (hapus) jalur direktori. Hanya berfungsi saat direktori kosong, jika tidak, OSError dibesarkan. Untuk menghapus seluruh pohon direktori, shutil.rmtree() dapat digunakan.

shutil.rmtree(path, ignore_errors=False, onerror=None)

shutil.rmtree Hapus seluruh pohon direktori. Path harus menunjuk ke sebuah direktori (tetapi bukan tautan simbolis ke direktori).

Jika ignore_errors benar, kesalahan yang dihasilkan dari penghapusan gagal akan diabaikan dan jika salah atau dihilangkan, kesalahan tersebut ditangani dengan memanggil handler yang ditentukan oleh onerror atau, jika itu dihilangkan, mereka meningkatkan pengecualian.

Lihat juga:

os.removedirs(name)

os.removedirs(name) Hapus direktori secara rekursif. Bekerja seperti rmdir () kecuali itu, jika direktori daun berhasil dihapus, removedirs () mencoba untuk secara berturut-turut menghapus setiap direktori induk yang disebutkan dalam path sampai kesalahan dinaikkan (yang diabaikan, karena ini biasanya berarti bahwa direktori induk tidak kosong ).

Misalnya, os.removedirs ('foo / bar / baz') terlebih dahulu akan menghapus direktori 'foo / bar / baz', dan kemudian menghapus 'foo / bar' dan 'foo' jika kosong.


50
2017-08-22 12:22



Buat fungsi untuk kalian.

def remove(path):
    """ param <path> could either be relative or absolute. """
    if os.path.isfile(path):
        os.remove(path)  # remove the file
    elif os.path.isdir(path):
        shutil.rmtree(path)  # remove dir and all contains
    else:
        raise ValueError("file {} is not a file or dir.".format(path))

22
2018-01-22 09:40



Anda dapat menggunakan built-in pathlib modul (membutuhkan Python 3.4+, tetapi ada backports untuk versi lama di PyPI: pathlib, pathlib2).

Untuk menghapus file ada unlink metode:

import pathlib
path = pathlib.Path(name_of_file)
path.unlink()

Atau itu rmdir metode untuk menghapus kosong map:

import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()

17
2017-08-06 20:10



Bagaimana cara menghapus file atau folder dengan Python?

Untuk Python 3, untuk menghapus file dan direktori secara individual, gunakan unlink dan rmdir  Path metode objek masing-masing:

from pathlib import Path
dir_path = Path.home() / 'directory' 
file_path = dir_path / 'file'

file_path.unlink() # remove file

dir_path.rmdir()   # remove directory

Perhatikan bahwa Anda juga dapat menggunakan jalur relatif dengan Path objek, dan Anda dapat memeriksa direktori kerja Anda saat ini dengan Path.cwd.

Untuk menghapus file dan direktori individu dengan 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:

from shutil import rmtree

rmtree(dir_path)

Demonstrasi

Baru di Python 3.4 adalah Path obyek.

Mari gunakan satu untuk membuat direktori dan file untuk mendemonstrasikan penggunaan. Perhatikan bahwa kami menggunakan / untuk bergabung dengan bagian dari jalur, ini bekerja di sekitar masalah antara sistem operasi dan masalah dari menggunakan backslashes pada Windows (di mana Anda perlu menggandakan backslash seperti \\ atau gunakan string mentah, seperti r"foo\bar"):

from pathlib import Path

# .home() is new in 3.5, otherwise use os.path.expanduser('~')
directory_path = Path.home() / 'directory'
directory_path.mkdir()

file_path = directory_path / 'file'
file_path.touch()

dan sekarang:

>>> file_path.is_file()
True

Sekarang mari kita hapus. Pertama file:

>>> file_path.unlink()     # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False

Kita dapat menggunakan globbing untuk menghapus beberapa file - pertama mari buat beberapa file untuk ini:

>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()

Kemudian, lakukan iterasi di atas pola glob:

>>> for each_file_path in directory_path.glob('*.my'):
...     print(f'removing {each_file_path}')
...     each_file_path.unlink()
... 
removing ~/directory/foo.my
removing ~/directory/bar.my

Sekarang, menunjukkan penghapusan direktori:

>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False

Bagaimana jika kita ingin menghapus direktori dan semua yang ada di dalamnya? Untuk use case ini, gunakan shutil.rmtree

Mari buat ulang direktori dan file kami:

file_path.parent.mkdir()
file_path.touch()

dan perhatikan itu rmdir gagal kecuali kosong, itulah sebabnya rmtree sangat nyaman:

>>> directory_path.rmdir()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "~/anaconda3/lib/python3.6/pathlib.py", line 1270, in rmdir
    self._accessor.rmdir(self)
  File "~/anaconda3/lib/python3.6/pathlib.py", line 387, in wrapped
    return strfunc(str(pathobj), *args)
OSError: [Errno 39] Directory not empty: '/home/excelsiora/directory'

Sekarang, impor rmtree dan lewati direktori ke funtion:

from shutil import rmtree
rmtree(directory_path)      # remove everything 

dan kita dapat melihat semuanya telah dihapus:

>>> directory_path.exists()
False

Python 2

Jika Anda menggunakan Python 2, ada a backport dari modul pathlib yang disebut pathlib2, yang dapat diinstal dengan pip:

$ pip install pathlib2

Dan kemudian Anda bisa alias perpustakaan pathlib

import pathlib2 as pathlib

Atau langsung mengimpor Path objek (seperti yang ditunjukkan di sini):

from pathlib2 import Path

Jika itu terlalu banyak, Anda dapat menghapus file dengan os.remove atau os.unlink

from os import unlink, remove
from os.path import join, expanduser

remove(join(expanduser('~'), 'directory/file'))

atau

unlink(join(expanduser('~'), 'directory/file'))

dan Anda dapat menghapus direktori dengan os.rmdir:

from os import rmdir

rmdir(join(expanduser('~'), 'directory'))

Perhatikan bahwa ada juga a os.removedirs - hanya menghapus direktori kosong secara rekursif, tetapi mungkin sesuai dengan use-case Anda.


7
2018-02-12 01:44



shutil.rmtree adalah fungsi asynchronous, jadi jika Anda ingin memeriksa ketika selesai, Anda dapat menggunakan ... loop

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')

3
2018-03-23 17:08



import os

folder = '/Path/to/yourDir/'
fileList = os.listdir(folder)

for f in fileList:
    filePath = folder + '/'+f

    if os.path.isfile(filePath):
        os.remove(filePath)

    elif os.path.isdir(filePath):
        newFileList = os.listdir(filePath)
        for f1 in newFileList:
            insideFilePath = filePath + '/' + f1

            if os.path.isfile(insideFilePath):
                os.remove(insideFilePath)

2
2017-10-25 12:49