55

尝试删除某个目录中的所有文件会给我以下错误:

OSError: [Errno 2] 没有这样的文件或目录:'/home/me/test/*'

我正在运行的代码是:

import os
test = "/home/me/test/*"
os.remove(test)
4

13 回答 13

73

os.remove()不适用于目录,os.rmdir()仅适用于空目录。而且 Python 不会像某些 shell 那样自动扩展“/home/me/test/*”。

但是,您可以使用shutil.rmtree()目录来执行此操作。

import shutil
shutil.rmtree('/home/me/test') 

小心,因为它也会删除文件和子目录

于 2009-06-24T17:19:30.890 回答
24

os.remove 不能解析 unix 样式的模式。如果您使用的是类 Unix 系统,您可以:

os.system('rm '+test)

否则,您可以:

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
   os.remove(i)
于 2009-06-24T17:22:31.603 回答
13

有点hack,但是如果您想保留目录,可以使用以下内容。

import os
import shutil
shutil.rmtree('/home/me/test') 
os.mkdir('/home/me/test')
于 2019-05-08T09:03:19.347 回答
7

因为 * 是一个 shell 构造。Python 实际上是在 /home/me/test 目录中寻找一个名为“*”的文件。使用 listdir 首先获取文件列表,然后对每个文件调用 remove。

于 2009-06-24T17:20:59.810 回答
5

虽然这是一个老问题,但我认为没有人使用这种方法回答过:

# 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) 
于 2016-05-13T17:24:56.763 回答
4

这将获取目录中的所有文件并删除它们。

import 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)
于 2019-01-07T11:08:02.147 回答
3

star 由 Unix shell 扩展。您的呼叫没有访问 shell,它只是试图删除名称以星号结尾的文件

于 2009-06-24T17:22:37.077 回答
1

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
于 2009-06-25T04:19:54.747 回答
0

os.remove 只会删除一个文件。

为了使用通配符删除,您需要编写自己的例程来处理它。

此论坛页面上列出了很多建议的方法。

于 2009-06-24T17:17:04.870 回答
0

我这样做的另一种方式:

os.popen('rm -f ./yourdir')
于 2013-01-30T20:44:43.437 回答
0

请在此处查看我的答案:

https://stackoverflow.com/a/24844618/2293304

这是一个冗长而丑陋但可靠且有效的解决方案。

它解决了其他回答者未解决的一些问题:

  • 它正确处理符号链接,包括不调用符号链接(如果它链接到目录shutil.rmtree(),它将通过测试)。os.path.isdir()
  • 它很好地处理只读文件。
于 2014-07-19T20:48:54.913 回答
0
#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
于 2015-03-10T14:10:38.500 回答
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)
于 2019-12-12T12:23:27.373 回答