ファイルやフォルダを削除する方法は?

2011年08月09日に質問されました。  ·  閲覧回数 2.2M回  ·  ソース

Zygimantas picture
2011年08月09日

Pythonでファイルまたはフォルダーを削除するにはどうすればよいですか?

回答

RichieHindle picture
2011年08月09日
3597
  • os.remove()はファイルを削除します。

  • os.rmdir()は、空のディレクトリを削除します。

  • shutil.rmtree() 、ディレクトリとそのすべての内容を削除します。


Python 3.4+ pathlibモジュールのPathオブジェクトも、次のインスタンスメソッドを公開します。

Anand Tripathi picture
2017年03月07日
341

ファイルを削除するPython構文

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

または

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

または

Pythonバージョン> = 3.4のpathlibライブラリ

file_to_rem = pathlib.Path("/tmp/<file_name>.txt")
file_to_rem.unlink()

Path.unlink(missing_ok = False)

ファイルまたはシンボリックリンクを削除するために使用されるリンク解除方法。

Missing_okがfalse(デフォルト)の場合、パスが存在しないとFileNotFoundErrorが発生します。
Missing_okがtrueの場合、FileNotFoundError例外は無視されます(POSIX rm -fコマンドと同じ動作)。
バージョン3.8で変更:missing_okパラメーターが追加されました。

ベストプラクティス

  1. まず、ファイルまたはフォルダが存在するかどうかを確認してから、そのファイルのみを削除します。 これは2つの方法で実現できます。
    a。 os.path.isfile("/path/to/file")
    b。 exception handling.使用する

たとえば、 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)

例外処理

#!/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))

それぞれの出力

削除するファイル名を入力してください:demo.txt
エラー:demo.txt-そのようなファイルまたはディレクトリはありません。

削除するファイル名を入力してください:rrr.txt
エラー:rrr.txt-操作は許可されていません。

削除するファイル名を入力してください:foo.txt

フォルダを削除するPython構文

shutil.rmtree()

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))
Mihai Maruseac picture
2011年08月09日
93

使用する

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

shutilに関する完全なドキュメントを参照)および/または

os.remove

そして

os.rmdir

OSに関する完全なドキュメント。)

flycee picture
2017年01月22日
47

os.removeshutil.rmtree両方を使用する堅牢な関数を次に示します。

def remove(path):
    """ param <path> could either be relative or absolute. """
    if os.path.isfile(path) or os.path.islink(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))
MSeifert picture
2017年08月07日
35

組み込みのpathlibモジュールを使用できます(Python 3.4以降が必要ですが、PyPIには古いバージョンのバックポートがあります: pathlibpathlib2 )。

ファイルを削除するには、 unlinkメソッドがあります。

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

または、 rmdirメソッドを使用して空のフォルダーを削除します。

import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
Aaron Hall picture
2018年02月12日
30

Pythonでファイルまたはフォルダーを削除するにはどうすればよいですか?

Python 3の場合、ファイルとディレクトリを個別に削除するには、それぞれunlinkrmdir Pathオブジェクトメソッドを使用します。

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

file_path.unlink() # remove file

dir_path.rmdir()   # remove directory

Pathオブジェクトで相対パスを使用することもでき、 Path.cwd現在の作業ディレクトリを確認できることに注意してください。

Python 2で個々のファイルとディレクトリを削除する方法については、以下のラベルが付いたセクションを参照してください。

内容のあるディレクトリを削除するには、 shutil.rmtree使用します。これは、Python2および3で使用できることに注意してください。

from shutil import rmtree

rmtree(dir_path)

デモンストレーション

Python 3.4の新機能は、 Pathオブジェクトです。

1つを使用して、使用法を示すディレクトリとファイルを作成しましょう。 パスの一部を結合するために/を使用することに注意してください。これは、オペレーティングシステム間の問題と、Windowsでバックスラッシュを使用することによる問題( \\ようにバックスラッシュを2倍にする必要がある場合)を回避します。 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()

そして今:

>>> file_path.is_file()
True

それでは、それらを削除しましょう。 最初のファイル:

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

グロブを使用して複数のファイルを削除できます。まず、このためにいくつかのファイルを作成しましょう。

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

次に、グロブパターンを繰り返し処理します。

>>> 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

ここで、ディレクトリの削除を示します。

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

ディレクトリとその中のすべてを削除したい場合はどうなりますか? このユースケースでは、 shutil.rmtree使用します

ディレクトリとファイルを再作成しましょう:

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

rmdirは空でない限り失敗することに注意してください。これが、rmtreeが非常に便利な理由です。

>>> 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/username/directory'

次に、rmtreeをインポートし、ディレクトリを関数に渡します。

from shutil import rmtree
rmtree(directory_path)      # remove everything 

そして、すべてが削除されたことがわかります。

>>> directory_path.exists()
False

Python 2

Python 2を使用している場合は、pathlib2と呼ばれるpathlibモジュールのバックポートがあります。これはpipでインストールできます。

$ pip install pathlib2

そして、ライブラリをpathlibエイリアスすることができます

import pathlib2 as pathlib

または、 Pathオブジェクトを直接インポートします(ここに示すように):

from pathlib2 import Path

それが多すぎる場合は、 os.removeまたはos.unlinkファイルを削除できます

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

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

または

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

os.rmdirディレクトリを削除できます:

from os import rmdir

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

os.removedirsもあることに注意してください。空のディレクトリを再帰的に削除するだけですが、ユースケースに適している場合があります。

Lalithesh picture
2017年10月25日
4
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)
m0z4rt picture
2018年03月24日
4

shutdown.rmtreeは非同期関数であるため、いつ完了するかを確認する場合は、while ... loopを使用できます。

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')
Somnath Muluk picture
2019年08月01日
3

ファイルを削除する場合:

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

または

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

両方の関数は意味的に同じです。 この関数は、ファイルパスを削除(削除)します。 パスがファイルではなくディレクトリである場合、例外が発生します。

フォルダを削除する場合:

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

または

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

ディレクトリツリー全体を削除するには、 shutil.rmtree()を使用できます。 os.rmdirは、ディレクトリが空で存在する場合にのみ機能します。

親に向かって再帰的にフォルダを削除する場合:

os.removedirs(name)

それはいくつかのコンテンツを持っている親まで自分自身ですべての空の親ディレクトリを削除します

例 os.removedirs( 'abc / xyz / pqr')は、ディレクトリが空の場合、 'abc / xyz / pqr'、 'abc / xyz'、および 'abc'の順序でディレクトリを削除します。

詳細については、公式ドキュメントを確認してください: os.unlinkos.removeos.rmdirshutil.rmtreeos.removedirs

Sarender Reddy picture
2019年12月12日
0

フォルダ内のすべてのファイルを削除するには

import os
import glob

files = glob.glob(os.path.join('path/to/folder/*'))
files = glob.glob(os.path.join('path/to/folder/*.csv')) // It will give all csv files in folder
for file in files:
    os.remove(file)

ディレクトリ内のすべてのフォルダを削除するには

from shutil import rmtree
import os

// os.path.join()  # current working directory.

for dirct in os.listdir(os.path.join('path/to/folder')):
    rmtree(os.path.join('path/to/folder',dirct))