使用Python实现文件夹的整理,原理是根据各种文件的后缀名来判断文件是音频、图像、视频、代码文件等
操作系统:windows10 家庭版
开发环境:Pycharm Conmunity 2022.3
解释器版本:Python3.8
废话就不多说,要说的都在注释里面了:
# 导入相关模块
import datetime
import os
from pathlib import Path
import time
# 创建分类表,使得文件根据不同的后缀名进入不同的文件夹
DIRECTORIES = {
"图片": [".jpeg", ".jpg", ".tiff", ".gif", ".bmp", ".png", ".bpg", "svg",
".heif", ".psd"],
"视频": [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng",
".qt", ".mpg", ".mpeg", ".3gp", ".mkv"],
"文档": [".oxps", ".epub", ".pages", ".docx", ".doc", ".fdf", ".ods",
".odt", ".pwi", ".xsn", ".xps", ".dotx", ".docm", ".dox",
".rvg", ".rtf", ".rtfd", ".wpd", ".xls", ".xlsx", ".ppt",
"pptx",".csv",",pdf"],
"压缩文件": [".a", ".ar", ".cpio", ".iso", ".tar", ".gz", ".rz", ".7z",
".dmg", ".rar", ".xar", ".zip"],
"影音": [".aac", ".aa", ".aac", ".dvf", ".m4a", ".m4b", ".m4p", ".mp3",
".msv", "ogg", "oga", ".raw", ".vox", ".wav", ".wma"],
"文本": [".txt", ".in", ".out"],
"编程": [".py",".html5", ".html", ".htm", ".xhtml",".c",".cpp",".java",".css"],
"可执行程序": [".exe"],
}
dir_name = ["图片","视频","文档","压缩文件","影音","文本","编程","可执行程序","其他文件"]
FILE_FORMATS = {file_format: directory
for directory, file_formats in DIRECTORIES.items()
for file_format in file_formats}
# 文件整理
def auto_organize(dirval):
# 整理对应的文件夹下的文件
for entry in os.scandir(dirval):
if entry.is_dir():
# 如果是文件夹则跳过,先不处理
continue
file_path = Path(dirval + "\\" + entry.name)
file_format = file_path.suffix.lower()
# 避免后缀大小写判断问题,将后缀名全转为小写
if file_format in FILE_FORMATS:
directory_path = Path(dirval + "\\" + FILE_FORMATS[file_format])
directory_path.mkdir(exist_ok=True)
# 重命名
file_path.rename(directory_path.joinpath(entry.name))
# try-except 创建名为“其他文件”的文件夹
try:
os.mkdir(dirval + "\\" +"其他文件")
except:
pass
# 将未处理的文件加入其他文件
for dir in os.scandir(dirval):
try:
if dir.is_dir():
# 删除空文件夹
os.rmdir(dir)
else:
temp = str(Path(dir)).split('\\')
# 分割文件路径
path = '\\'.join(temp[:-1])
print(path + '\\其他文件\\' + str(temp[-1]))
# 重命名,更改其路径
os.rename(str(Path(dir)), path + '\\其他文件\\' + str(temp[-1]))
except:
pass
# 获取当前日期
now = datetime.datetime.now()
now = now.strftime("%Y-%m-%d")
# 创建名为 当前日期的文件夹
try:
os.mkdir(dirval + "\\" + now)
except:
pass
# 所有带后缀名的办公文件已经整理完毕,现在清点文件夹
for entry in os.scandir(dirval):
if entry.is_dir():
if entry.name in dir_name:
# 如果是办公类的文件夹,那么归入今天这个文件夹中
os.rename(dirval+"\\"+entry.name,dirval+"\\"+ now +"\\"+entry.name)
print("文件已整理成功!")
if __name__ == "__main__":
# 调用函数,开始整理文件
auto_organize(input("请输入待整理文件夹的完整路径:"))
下面这个是整理之前的文件夹:
下面演示我们的代码:
生成了一个以今日日期命名的文件夹,进入查看,发现文件都已被分类好