Python中os模块删除某个文件夹中所有的文件

今天想删除E盘根目录下的一个文件夹(新建文件夹),这个文件夹里有一个文件(360safe)。

然后直接用的

import os
path = 'E:/新建文件夹'
os.rmdir(path)

运行后报错如下:

Traceback (most recent call last):
  File "F:\pythonProject\youyou\demo.py", line 7, in 
    os.rmdir(path)
OSError: [WinError 145] 目录不是空的。: 'E:/新建文件'

进程已结束,退出代码为 1

报错是因为目录不是空的,也就是说,用Python中的‘os.rmdir’删除文件夹的前提是文件夹必须为空。

于是百度了一下,发现了一个教程给了如下的代码:我只读懂了前半部分,后面的看不懂了。

import os #引入库
import shutil #引入库
def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
    if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
        paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
        for path in paths:
            filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
            if os.path.isfile( filePath ):#见第8行
                try:
                    os.remove( filePath )#删除
                except os.error:#后边这些都看不懂喽
                    autoRun.exception( "remove %s error." %filePath )#引入logging
            elif os.path.isdir( filePath ):
                if filePath[-4:].lower() == ".svn".lower():
                    continue
                shutil.rmtree(filePath,True)
    return True

Dir = 'E:/新建文件夹'#这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
CleanDir(Dir)

运行后,发现E盘新建文件夹下的360sef文件被删除了,但是新建文件夹还在,也就是说上面这些代码的运行后,就是把Dir设置的文件夹下的所有文件删除,为了验证,我又在这个新建文件夹里放了一些文件,然后运行代码,发现果然被删除了。

上面的代码运行完,文件夹里的内容被删除了,那么现在这个文件夹就变成空文件夹了,这时候再用‘os.rmdir’来删除这个文件夹就可以了吧,

在上面这个代码的后面加一句

os.rmdir(Dir)

这样这个文件夹不就被删除了吗,试了一下,果然可以,于是就有了下面的代码

功能是,删除指定的一个文件夹,包括文件夹里所有的内容,大家直接复制拿去用就可以,只需要将Dir的值改成自己要删除的文件夹路径就可以了。代码如下

# coding=utf-8
# 龟仙岛
# 自学Python,求师指点
# 开发时间:2021/8/17 14:13
import os #引入库
import shutil #引入库
def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
    if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
        paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
        for path in paths:
            filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
            if os.path.isfile( filePath ):#见第8行
                try:
                    os.remove( filePath )#删除
                except os.error:#后边这些都看不懂喽
                    autoRun.exception( "remove %s error." %filePath )#引入logging
            elif os.path.isdir( filePath ):
                if filePath[-4:].lower() == ".svn".lower():
                    continue
                shutil.rmtree(filePath,True)
    return True
Dir = 'E:/新建文件夹'#这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
CleanDir(Dir)#删除文件夹下所有文件
os.rmdir(Dir))#删除文件夹

测试了几个文件夹,都成功了,但是又遇到了问题,我在E盘根目录下新建了一个叫001的文件,然后把上面的代码Dir改成=‘E:/001’,发现/001不是绿色的了,我知道要出问题了,运行了一下,果然报错了,报错如下:

Traceback (most recent call last):
  File "F:\pythonProject\ceshi.py", line 24, in 
    os.rmdir(Dir)
OSError: [WinError 123] 文件名、目录名或卷标语法不正确。: 'E:\x01'

进程已结束,退出代码为 1

报错的原因是文件名文件名、目录名或卷标语法不正确,也就是说这个代码无法删除数字(起码是部分)数字开头的文件夹,于是我又试了试,把文件夹名改成了a001或n001等等,都是报错如上。

这时候我想起了'\'在Python中经常会让一些字符串改变,只要在变量前加个字母r,就可以不让它变了,那么把Dir=‘文件夹路径’改成Dir=r‘文件夹路径’那不就解决了。

于是试了一下,果然可以了,无论文件夹命名是什么,都可以删除了,这次代码完美了,删除指定的文件夹,及文件夹下所有文件的Python全部代码如下:

import os #引入库
import shutil #引入库
def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
    if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
        paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
        for path in paths:
            filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
            if os.path.isfile( filePath ):#见第8行
                try:
                    os.remove( filePath )#删除
                except os.error:#后边这些都看不懂喽
                    autoRun.exception( "remove %s error." %filePath )#引入logging
            elif os.path.isdir( filePath ):
                if filePath[-4:].lower() == ".svn".lower():
                    continue
                shutil.rmtree(filePath,True)
    return True
Dir = r'E:\001'#这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
CleanDir(Dir)
os.rmdir(Dir)

但是问题又来了,当有这个文件夹的时候,可以删除文件夹和文件夹下所有文件,但是当没有文件夹的时候,运行又报错

Traceback (most recent call last):
  File "F:\pythonProject\ceshi.py", line 24, in 
    os.rmdir(Dir)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'E:\\001'

进程已结束,退出代码为 1

于是我就想,如果有这个文件夹,那么我们就删这个文件夹,如果没有这个文件夹,就提示没有这个文件夹,这样就不会报错了,于是自己研究了一下,修改了一下代码如下:

import os  # 引入库
import shutil  # 引入库

Dir = r'E:\sai'  # 这是设定的是文件夹路径,上面的东西不用管,只在这改成要删除文件的文件夹路径就行了。
if os.path.isdir(Dir)==0:
    print('你逗我呢,没有这个文件夹')
    quit()
else:
   def CleanDir( Dir ): #声明一个叫cleandir的函数,函数的参数是dir
    if os.path.isdir( Dir ): #os.path.isdir()函数判断dir是否是一个目录,同理os.path.isfile()函数判断是否是一个文件。
        paths = os.listdir( Dir )#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
        for path in paths:
            filePath = os.path.join( Dir, path )#os.path.join()方法是,拼接参数里的路径,
            if os.path.isfile( filePath ):#见第8行
                try:
                    os.remove( filePath )#删除
                except os.error:#后边这些都看不懂喽
                    autoRun.exception( "remove %s error." %filePath )#引入logging
            elif os.path.isdir( filePath ):
                if filePath[-4:].lower() == ".svn".lower():
                    continue
                shutil.rmtree(filePath,True)
    return True
CleanDir(Dir)#删除文件夹下的文件
os.rmdir(Dir)#删除文件夹
print('删除文件夹完毕')

你可能感兴趣的:(Python学习日志,python)