Python程序删除具有特定扩展名的文件

时间:2020-01-09 10:44:20  来源:igfitidea点击:

在本教程中,我们将看到如何编写Python程序来删除所有具有特定扩展名的文件。

1.使用os.listdir()

在Python的os模块中,有一个函数listdir()返回一个包含目录中条目名称的列表。我们可以迭代该列表以查找以特定扩展名结尾的文件名,然后删除这些文件。

我们将在程序中使用以下目录结构

Test
    abc.txt
    abc1.txt
    newimage.png
    Sub1 (D)
          sub1.txt
    Sub2 (D)
          sub2.txt
def delete_files(dir_path):
    path = os.listdir(dir_path);
    for entry in path:
        print(entry)
        if entry.endswith(".txt"):
            p = os.path.join(dir_path, entry)
            print('Deleting', p)
            os.remove(p)

delete_files("F:\theitroad\Python\Test")

输出:

abc.txt
Deleting F:\theitroad\Python\Test\abc.txt
abc1.txt
Deleting F:\theitroad\Python\Test\abc1.txt
newimage.png
Sub1
Sub2

如我们所见,目录Test中扩展名为.txt的文件已删除。该程序不会递归删除子目录中的文件。如果我们也要删除子目录中具有特定扩展名的文件,则可以使上述Python程序递归调用函数,也可以在glob模块中使用函数。

Python程序以递归方式删除具有特定扩展名的文件

def delete_files(dir_path):
    path = os.listdir(dir_path);
    for entry in path:
        print(entry)
        p = os.path.join(dir_path, entry)
        if os.path.isdir(p):
            print('Directory', p)
            # recursive call
            delete_files(p)
        else:
            if p.endswith(".txt"):
                print('Deleting', p)
                os.remove(p)

输出:

abc.txt
Deleting F:\theitroad\Python\Test\abc.txt
abc1.txt
Deleting F:\theitroad\Python\Test\abc1.txt
newimage.png
Sub1
Directory F:\theitroad\Python\Test\Sub1
sub1.txt
Deleting F:\theitroad\Python\Test\Sub1\sub1.txt
Sub2
Directory F:\theitroad\Python\Test\Sub2
sub2.txt
Deleting F:\theitroad\Python\Test\Sub2\sub2.txt

2.在Python中使用glob()模块

glob模块找到与指定模式匹配的所有路径名。我们可以使用此模块查找具有特定扩展名的文件并将其删除。在glob模块中,有函数glob()(返回列表)和iglob()(返回迭代器),它们返回匹配的路径名。
在glob或者iglob中,我们可以传递参数recursive = True,如果递归为true,则模式" **"将匹配任何文件以及零个或者多个目录和子目录。默认情况下,递归的值为false。

def delete_files(dir_path, ext):
    file_itr = glob.glob(dir_path + '/*' + ext, recursive=True)
    for entry in file_itr:
        print('Deleting', entry)
        os.remove(entry)

delete_files("F:\theitroad\Python\Test\**", ".txt")

输出:

Deleting F:\theitroad\Python\Test\abc.txt
Deleting F:\theitroad\Python\Test\abc1.txt
Deleting F:\theitroad\Python\Test\Sub1\sub1.txt
Deleting F:\theitroad\Python\Test\Sub2\sub2.txt