Python 删除目录中的所有文件

Python 删除目录中的所有文件,python,unix,file-management,Python,Unix,File Management,尝试删除某个目录中的所有文件时会出现以下错误: OSError:[Errno 2]没有这样的文件或目录:'/home/me/test/*' 我正在运行的代码是: import os test = "/home/me/test/*" os.remove(test) os.remove将只删除一个文件 为了使用通配符删除,您需要编写自己的例程来处理这个问题 此论坛页面上列出了。os.remove()不适用于目录,而os.rmdir()只适用于空目录。Python不会像某些shell那样自动扩展“/

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

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

我正在运行的代码是:

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

os.remove将只删除一个文件

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

此论坛页面上列出了。

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

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

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

在删除文件和子目录时要小心。

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

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

os.system('rm '+test)
否则,您可以:

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

star由unixshell扩展。您的调用不是访问shell,在大多数情况下,它只是试图删除一个名称以星号结尾的文件。但它不适用于Windows中的只读文件。对于windows,请从PyWin32导入Win32 API和Win32 CON模块

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

另一种方法是:

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

请看我的回答:

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

它解决了其他回答者没有解决的几个问题:

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

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

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

这将获取目录中的所有文件并将其删除

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)

有点像黑客,但是如果你想保留这个目录,可以使用下面的方法

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

删除文件夹中的所有文件

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)

系统有许多警告,包括也不解析glob模式(因为它只是将行传递给shell);glob返回目录和文件(os.remove无法处理)是迄今为止最好的答案:import shutil;shutil.rmtree('/home/me/test')注意,使用shutil.rmtree()还将删除给定路径末尾的文件夹(它不会删除目录内容,而是删除目录),这并不能解释
操作系统不接受
/home/me/test/*
的原因。我已经编辑了答案。当您使用
os.remove()
时,您需要包含文件的完整路径,因此您必须执行
os.remove(os.path.join(“/home/me/test”,f))
才能工作。另外,文件中f的
os.remove(f)行语法无效。不是每件事都需要理解。我非常喜欢这个答案,使用
os
调用。我把它作为我工作的基础:
filesToRemove=[f代表os.listdir(self.my_文件夹)中的f代表filesToRemove:os.remove(os.path.join(self.my_文件夹,f))
(需要缩进)。如果我想使用相对路径怎么办?请help@deef-我重新考虑了这个要求。在这种情况下,最好的方法是标记为重复。不可移植,并且
rm-f目录
就是不起作用。我想知道为什么会有这么高的投票率
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)