删除目录中的所有文件

时间:2009-06-24 17:12:20

标签: python unix

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

OSError: [Errno 2] No such file or directory: '/home/me/test/*'

我正在运行的代码是:

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

13 个答案:

答案 0 :(得分:53)

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

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

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

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

答案 1 :(得分:13)

os.remove无法解析unix样式的模式。如果你使用类似unix的系统,你可以:

os.system('rm '+test)

否则你可以:

import glob, os
test = '/path/*'
r = glob.glob(test)
for i in r:
   os.remove(i)

答案 2 :(得分:8)

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

答案 3 :(得分:4)

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

# 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) 

答案 4 :(得分:3)

star由Unix shell扩展。你的电话不是访问shell,它只是试图删除名称以星号

结尾的文件

答案 5 :(得分:2)

我这样做的另一种方式是:

os.popen('rm -f ./yourdir')

答案 6 :(得分: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

答案 7 :(得分:1)

这会将所有文件保存在目录中,并将其删除。

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)

答案 8 :(得分:1)

有点骇人听闻,但如果您想保留目录,可以使用以下内容。

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

答案 9 :(得分:0)

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

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

此论坛页面上列出了quite a few suggested approaches

答案 10 :(得分:0)

请在此处查看我的回答:

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

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

它解决了其他问题无法解决的一些问题:

  • 它正确处理符号链接,包括不在符号链接上调用shutil.rmtree()(如果链接到目录,将通过os.path.isdir()测试。)
  • 它很好地处理只读文件。

答案 11 :(得分: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

答案 12 :(得分: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)