我如何用 Python 脚本组织我的混乱文件夹
在本教程中,您将学习如何创建一个 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 和开源的内容。
更多推荐

所有评论(0)