尝试删除某个目录中的所有文件时,出现以下错误:
OSError: [Errno 2] No such file or directory: '/home/me/test/*'
我运行的代码是:
import os
test = "/home/me/test/*"
os.remove(test)
尝试删除某个目录中的所有文件时,出现以下错误:
OSError: [Errno 2] No such file or directory: '/home/me/test/*'
我运行的代码是:
import os
test = "/home/me/test/*"
os.remove(test)
os.remove()
无法删除目录,os.rmdir()
只能删除空目录。而 Python 不会自动扩展类似于一些 shell 的 "/home/me/test/*"。
你可以使用 shutil.rmtree()
来删除整个目录。
import shutil
shutil.rmtree('/home/me/test')
请小心,因为它会删除文件和子目录。
os.remove
不接受 /home/me/test/*
。我已经编辑了答案。 - Jean-François Fabreos.remove无法解析Unix风格的模式。如果您在类Unix系统上,则可以执行以下操作:
os.system('rm '+test)
否则,您可以:
import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
os.remove(i)
这有点像 hack,但如果你想保留目录,可以使用以下方法。
import os
import shutil
shutil.rmtree('/home/me/test')
os.mkdir('/home/me/test')
因为*是一个shell构造。Python实际上在目录/home/me/test中寻找名为“*”的文件。首先使用listdir获取文件列表,然后对每个文件调用remove。
虽然这个问题比较老了,但我认为还没有人使用这种方法来回答:
# python 2.7
import os
d='/home/me/test'
filesToRemove = [os.path.join(d,f) for f in os.listdir(d)]
for f in filesToRemove:
os.remove(f)
os.remove()
函数时需要包含文件的完整路径,因此要执行os.remove(os.path.join("/home/me/test", f))
以使其正常工作。 - deefos.remove(f) for f in files
不是有效的语法。并不是所有东西都使用推导式。 - Jean-François Fabreos
调用。我已经将其作为我的工作基础:filesToRemove = [f for f in os.listdir(self.my_folder)] for f in filesToRemove: os.remove(os.path.join(self.my_folder, f))
(需要缩进)。 - wmorrison365import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
dir = os.path.join(BASE_DIR, "foldername")
for root, dirs, files in os.walk(dir):
for file in files:
path = os.path.join(dir, file)
os.remove(path)
星号在Unix shell中被扩展。你的调用并没有访问shell,它只是试图删除以星号结尾的文件。
对于大多数情况,shutil.rmtree() 是最常用的方法。但在Windows中它无法删除只读文件。解决方法是在Windows环境下使用PyWin32库导入win32api和win32con模块。
def rmtree(dirname):
retry = True
while retry:
retry = False
try:
shutil.rmtree(dirname)
except exceptions.WindowsError, e:
if e.winerror == 5: # No write permission
win32api.SetFileAttributes(dirname, win32con.FILE_ATTRIBUTE_NORMAL)
retry = True
#python 2.7
import tempfile
import shutil
import exceptions
import os
def TempCleaner():
temp_dir_name = tempfile.gettempdir()
for currentdir in os.listdir(temp_dir_name):
try:
shutil.rmtree(os.path.join(temp_dir_name, currentdir))
except exceptions.WindowsError, e:
print u'Не удалось удалить:'+ e.filename
https://dev59.com/5nVC5IYBdhLWcg3wykQt#24844618
这是一个冗长而丑陋,但可靠高效的解决方案。
它解决了其他答案未能解决的一些问题:
shutil.rmtree()
(如果符号链接指向目录,则会通过os.path.isdir()
测试)。