Delete a file or folder
如何删除python中的文件或文件夹?
用于删除文件的python语法
1 2 | import os os.remove("/tmp/<file_name>.txt") |
或
1 2 | import os os.unlink("/tmp/<file_name>.txt") |
最佳实践
1 2 3 4 5 6 7 8 9 | #!/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) |
异常处理
1 2 3 4 5 6 7 8 9 10 11 | #!/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)) |
各自输出
1 2 3 4 5 6 7 | Enter file name to delete : demo.txt Error: demo.txt - No such file or directory. Enter file name to delete : rrr.txt Error: rrr.txt - Operation not permitted. Enter file name to delete : foo.txt |
删除文件夹的python语法
1 | shutil.rmtree() |
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/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)) |
使用
1 | shutil.rmtree(path[, ignore_errors[, onerror]]) |
(参见关于Shutil的完整文档)和/或
1 | os.remove |
和
1 | os.rmdir |
(完整的操作系统文档。)
删除文件:
您可以使用
1 | os.unlink(path, *, dir_fd=None) |
或
1 | os.remove(path, *, dir_fd=None) |
此函数删除(删除)文件路径。如果path是一个目录,则会引发
在python 2中,如果路径不存在,则会引发带有[errno 2]的
1 | os.rmdir(path, *, dir_fd=None) |
1 | shutil.rmtree(path, ignore_errors=False, onerror=None) |
如果"忽略错误"为true,则将忽略由于删除失败而导致的错误;如果为false或省略,则通过调用onerror指定的处理程序来处理这些错误;如果忽略,则会引发异常。
参见:
1 | os.removedirs(name) |
例如,os.removedirs("foo/bar/baz")将首先删除目录"foo/bar/baz",然后删除"foo/bar"和"foo"(如果它们为空)。
为你们创建一个函数。
1 2 3 4 5 6 7 8 | 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)) |
您可以使用内置的
要删除文件,可以使用
1 2 3 | import pathlib path = pathlib.Path(name_of_file) path.unlink() |
或者使用
1 2 3 | import pathlib path = pathlib.Path(name_of_folder) path.rmdir() |
How do I delete a file or folder in Python?
对于python 3,要分别删除文件和目录,请分别使用
1 2 3 4 5 6 7 | from pathlib import Path dir_path = Path.home() / 'directory' file_path = dir_path / 'file' file_path.unlink() # remove file dir_path.rmdir() # remove directory |
注意,您也可以使用与
有关在python 2中删除单个文件和目录的信息,请参见下面标记的部分。
要删除包含内容的目录,请使用
1 2 3 | from shutil import rmtree rmtree(dir_path) |
示范
python 3.4中的新对象是
让我们用一个来创建一个目录和文件来演示用法。请注意,我们使用
1 2 3 4 5 6 7 8 | 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() |
现在:
1 2 | >>> file_path.is_file() True |
现在让我们删除它们。第一个文件:
1 2 3 4 5 | >>> file_path.unlink() # remove file >>> file_path.is_file() False >>> file_path.exists() False |
我们可以使用globbing删除多个文件-首先,让我们为此创建一些文件:
1 2 | >>> (directory_path / 'foo.my').touch() >>> (directory_path / 'bar.my').touch() |
然后迭代glob模式:
1 2 3 4 5 6 | >>> 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 |
现在,演示如何删除目录:
1 2 3 4 5 | >>> directory_path.rmdir() # remove directory >>> directory_path.is_dir() False >>> directory_path.exists() False |
如果我们想删除一个目录及其所有内容怎么办?对于这个用例,使用
让我们重新创建目录和文件:
1 2 | file_path.parent.mkdir() file_path.touch() |
注意,除非它是空的,否则
1 2 3 4 5 6 7 8 | >>> 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' |
现在,导入rmtree并将目录传递给函数:
1 2 | from shutil import rmtree rmtree(directory_path) # remove everything |
我们可以看到整件事都被移走了:
1 2 | >>> directory_path.exists() False |
Python 2
如果您使用的是python 2,那么有一个名为pathlib2的pathlib模块的后端口,它可以与pip一起安装:
1 | $ pip install pathlib2 |
然后您可以将库别名为
1 | import pathlib2 as pathlib |
或者直接导入
1 | from pathlib2 import Path |
如果太多,可以删除带有
1 2 3 4 | from os import unlink, remove from os.path import join, expanduser remove(join(expanduser('~'), 'directory/file')) |
或
1 | unlink(join(expanduser('~'), 'directory/file')) |
您可以使用
1 2 3 | from os import rmdir rmdir(join(expanduser('~'), 'directory')) |
注意,还有一个
rmtree是异步函数,所以如果您想检查它何时完成,可以使用while…循环
1 2 3 4 5 6 7 8 9 | import os import shutil shutil.rmtree(path) while os.path.exists(path): pass print('done') |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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) |
我建议您使用
1 2 | import subprocess subprocess.Popen("rm -r my_dir", shell=True) |
如果您不是软件工程师,那么可以考虑使用jupyter;您只需键入bash命令:
1 | !rm -r my_dir |
传统上,您使用
1 2 | import shutil shutil.rmtree(my_dir) |