如何删除文件或文件夹?
当前回答
如何在Python中删除文件或文件夹?
对于Python 3,要单独删除文件和目录,请分别使用unlink和rmdir 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,并注意这在Python 2和3中可用:
from shutil import rmtree
rmtree(dir_path)
集会示威
Python 3.4中的新功能是Path对象。
让我们使用一个来创建一个目录和文件来演示用法。请注意,我们使用/来连接路径的部分,这可以解决操作系统之间的问题以及在Windows上使用反斜杠的问题(您需要将反斜杠加倍,如\\或使用原始字符串,如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
我们可以使用globbing删除多个文件-首先让我们为此创建几个文件:
>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()
然后只需遍历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
现在,演示如何删除目录:
>>> 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'))
or
unlink(join(expanduser('~'), 'directory/file'))
并且可以使用os.rmdir删除目录:
from os import rmdir
rmdir(join(expanduser('~'), 'directory'))
注意,还有一个os.removedirs-它只递归地删除空目录,但可能适合您的用例。
其他回答
下面是一个同时使用os.remove和shutil.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))
Use
shutil.rmtree(path[, ignore_errors[, onerror]])
(参见shutil的完整文档)和/或
os.remove
and
os.rmdir
(操作系统的完整文档)
删除文件夹中的所有文件
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))
如果您喜欢编写一段漂亮且可读的代码,我建议使用子流程:
import subprocess
subprocess.Popen("rm -r my_dir", shell=True)
如果你不是软件工程师,那么可以考虑使用Jupyter;您可以简单地键入bash命令:
!rm -r my_dir
传统上,您使用shutil:
import shutil
shutil.rmtree(my_dir)
os.remove()删除文件。os.rmdir()删除空目录。shutil.rmtree()删除目录及其所有内容。
Python 3.4+pathlib模块中的路径对象还公开了以下实例方法:
pathlib.Path.unlink()删除文件或符号链接。pathlib.Path.rmdir()删除空目录。
推荐文章
- Linux删除大小为0的文件
- 在python中,年龄从出生日期开始
- 使用pip安装SciPy
- 在Python中,我应该如何测试变量是否为None, True或False
- 如何在Python中从毫秒创建datetime ?
- 如何解窝(爆炸)在一个熊猫数据帧列,成多行
- 如何使用pip安装opencv ?
- 在pip冻结命令的输出中“pkg-resources==0.0.0”是什么
- 格式y轴为百分比
- 熊猫连接问题:列重叠但没有指定后缀
- 为什么空字典在Python中是一个危险的默认值?
- 在Python中,冒号等于(:=)是什么意思?
- Python "SyntaxError:文件中的非ascii字符'\xe2' "
- 如何从psycopg2游标获得列名列表?
- Python中dict对象的联合