在本教程中,您将学习如何创建一个 Python 脚本,该脚本按文件扩展名组织您的文件夹。

本文的先决条件是您应该熟悉基本的 Python 编程以及如何在 Python 中使用模块。

我电脑中的下载文件夹对我来说是第二个回收站。这是它的样子。 截图

那个文件夹里有112个文件,我不是很擅长在验证文件类型后一个一个地移动每个文件。让我们使用 Python 来自动化任务。

建什么?

一个脚本或 GUI 程序,它请求需要组织的文件夹,然后根据文件类型移动所有文件。例如,如果我有这样的文件:

presentation.pptx
index.html
cover.jpeg
header.png
project.docx
file.dll

运行脚本后,文件夹结构应为:

Organized/
     |
     |_ Documents/
     |     |_ presentation.pptx
     |     |_ project.docx
     |
     |_ Code/
     |     |_ index.html
     |
     |_ Images/
     |     |_ cover.jpeg
     |     |_ header.png
     |
     |_ Others/
           |_ file.dll

现在看起来很干净。每种文件类型都有自己的专用文件夹,查找变得更加容易。

规划

在首先触摸键盘之前,我们必须设计我们的逻辑,这是我们需要做的:

  • 询问需要整理的文件夹。

  • 从文件夹中检索所有文件路径。

  • 检查文件类型。

  • 根据扩展名移动文件。

对我来说看起来不错,现在让代码:

第一步:告诉脚本文件扩展名

首先让我们创建一个字典,告诉您的脚本每种类型的文件所在的文件夹。

filetypes = {
    "Images": ["png", "jpg", "jfif", "webp", "jpeg", "bmp", "tiff", "gif", "raw", "psd"],
    "Documents": ["doc", "docx", "ppt", "pptx", "xls", "xlsx", "pdf", "txt"],
    "Videos": ["mp4", "mpeg", "mkv", "srt"],
    "Code": ["html", "css", "js", "py", "cpp", "c"],
    "Audio": ["mp3", "wav", "ogg"],
    "Compressed": ["zip", "tar", "rar"],
}

第 2 步:询问目录路径

我正在使用 GUI 对话框获取目录名称,这很方便。 Tkinter 有这个惊人的askdirectory函数,我们可以在这里使用它。

from tkinter import filedialog
p = filedialog.askdirectory()

当我们运行上面的 cade 时,我们的对话框会出现,并且p包含我们选择的目录的路径。好的,我们完成了询问目录名称。

第三步:获取所有文件

现在我们必须从给定目录中获取所有文件,为此我正在使用 Pathlib,这是 Python 中的一个内置模块,它使使用 Paths 变得超级容易。但首先我们必须像我们上面计划的那样创建一个文件夹Organized

from Pathlib import Path
PATH = Path(p)
dest = PATH / "Organized"
dest.mkdir(exist_ok=True)

上面的代码采用 tkinter 文件对话框提供的路径p并将其发送到 Path(),我们创建一个新文件夹“Oganized”,如果它不存在,我们使用exist_ok=True来完成。

现在迭代部分,

files = []
for i in PATH.iterdir():
    if i.is_file():
        files.append(i)

上面的代码对PATH中的每个目录和文件进行迭代,如果是文件则将其保存在files列表中。 (这就是我们使用 Pathlib 的原因)

第 3 步:检查类型 -> 移动文件

现在唯一要做的就是检查文件类型,然后为文件创建一个文件夹(如果它已经存在则不创建)然后移动文件,但如果文件扩展名未知,则将文件移动到Others文件夹中。

for file in files:
        # done flag tells that if the file matched to a dictionary value or not
        done = 0
        # iterate over the keys and check if the file belong to the particular key
        for k in filetypes.keys():
            # Check if the file extension is in the values of the key
            if file.suffix[1:] in filetypes[k]:
                done = 1
                # make a new folder with `key name` and move the file there
                destf = dest / f"{k}"
                destf.mkdir(exist_ok=True)
                shutil.move(str(file.resolve()), str(destf))

        if done != 1:
            # if the file was not present in the dictionary the make Others folder  and move the file there
            destf = dest / "Others"
            destf.mkdir(exist_ok=True)
            shutil.move(str(file.resolve()), str(destf))

上面的代码从files列表中获取每个文件,然后检查扩展名是否存在于字典中。如果扩展名在字典中,请为文件类型创建一个文件夹并将文件移动到该文件夹中。如果在文件夹中找不到文件的扩展名,请将其移至“其他”文件夹。

运行脚本的时间:关键时刻

我在我的下载文件夹中运行脚本,查看脚本如何请求目录,并在几秒钟内创建了包含所有文件的 Organized 文件夹。

运行脚本

还有什么可以做的?

该脚本运行良好,但您可以使用该脚本进行一些试验:

  • 使用 argparse 进行命令行输入

  • 通过删除第二个循环并创建新的搜索方法来提高性能。

  • 使用tqdm显示找到的文件信息和进度条

尝试扩展脚本并确保在存储库上创建 PR。

这是脚本存储库链接

  • 感谢坚持到最后,意义重大。如果你喜欢这篇文章,那么也可以考虑在Twitter上查看我,我每天都会发布关于 python、javascript 和开源的内容。
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐