如何删除文件或文件夹?
当前回答
删除文件夹中的所有文件
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 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)
Use
shutil.rmtree(path[, ignore_errors[, onerror]])
(参见shutil的完整文档)和/或
os.remove
and
os.rmdir
(操作系统的完整文档)
为了避免Éric Araujo评论中强调的TOCTOU问题,您可以捕捉一个异常来调用正确的方法:
def remove_file_or_dir(path: str) -> None:
""" Remove a file or directory """
try:
shutil.rmtree(path)
except NotADirectoryError:
os.remove(path)
因为shutil.rmtree()将只删除目录,os.remove()或os.unlink()将仅删除文件。
您可以使用内置的pathlib模块(需要Python 3.4+,但PyPI上有旧版本的后端:pathlib、pathlib2)。
要删除文件,可以使用unlink方法:
import pathlib
path = pathlib.Path(name_of_file)
path.unlink()
或使用rmdir方法删除空文件夹:
import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
如何在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-它只递归地删除空目录,但可能适合您的用例。
推荐文章
- Numpy Max vs amax vs maximum
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 每n行有熊猫
- 实例属性attribute_name定义在__init__之外
- 如何获取在Python中捕获的异常的名称?
- 第一次出现的值大于现有值的Numpy
- 如何从Python函数中返回两个值?
- 前一个月的Python日期
- Python中方括号括起来的列表和圆括号括起来的列表有什么区别?
- Python日志记录不输出任何东西
- 每n秒运行特定代码
- SQLAlchemy是否有与Django的get_or_create等价的函数?
- 如何将python datetime转换为字符串,具有可读格式的日期?
- 美丽的汤和提取div及其内容的ID
- 在Python中重置生成器对象