1、场景
有时候文件夹下的文件可能比较杂乱,而我们希望可以通过文件后缀的形式将文件进行归类。面临的场景如下图。那么我们这个时候就有两种解决办法,1、采用右键按照文件类别排序,2、整体归并整理。
右键排序可能会导致整个的序列仍然很长,再文件数量较大时使用起来可能并不方便。介于所学技术,解决所遇问题的思路,本文采用python实现。
2、实现思路
处理思路较为简单:
1、遍历整个文件夹,寻找所有的文件
2、寻找整个文件夹中的拓展名类别,并放入到列表
3、建立文件夹、并移动文件到文件夹内
处理bug
1、部分文件不存在后缀
3、代码实现
import os
# train_dir = input("请输入要整理的文件夹:")
train_dir = "C:"
file_types = []
file_list = []
# 遍历文件夹,排除文件夹,建立为文件
for i in os.listdir(train_dir): # 遍历整个文件夹
path = os.path.join(train_dir, i)
if os.path.isfile(path): # 判断是否为一个文件,排除文件夹
file_list.append(i)
print(file_list)
# 全部后缀整理为file_types
for data_name in file_list:
file_types.append(os.path.splitext(data_name)[1][1:]) # 目录下所有文件的后缀
file_types = list(set(file_types))
file_types = ["其他文件" if x == "" else x for x in file_types]
try:
file_list.remove("ini")
except ValueError as e:
print("本文件夹不存在超链接,无需删除")
print(file_types)
# 在原定的目录下,创建同名文件夹
new_dir = train_dir + "\\" + "文件整理"
if os.path.exists(new_dir) == 0:
os.mkdir(new_dir)
for file_type in file_types:
# 以文件类型创建同名的文件夹
if os.path.exists(new_dir + "\\" + file_type):
print(file_type + "文件夹已存在")
else:
os.mkdir(new_dir + "\\" + file_type)
for file_type in file_types:
for file_name in file_list:
# 判断当前文件是不是该文件类型
if file_name.endswith("." + file_type):
try:
os.rename(train_dir + "\\" + file_name, new_dir + "\\" + file_type + "\\" + file_name)
except PermissionError as e:
print(train_dir + "\\" + file_name + "正在使用")
for data_name in file_list:
if os.path.splitext(data_name)[1][1:] == "":
try:
os.rename(train_dir + "\\" + file_name, new_dir + "\\" + "其他文件" + "\\" + file_name)
except PermissionError as e:
print(train_dir + "\\" + file_name + "正在使用")
print(train_dir + "文件夹文件归档完毕")
4、运行结果
文件目录为 运行目录->文件整理->各类别文件
5、可供改进的点
1、文件名可以输入,而修改代码实现
2、可以做QT界面,便于使用
3、文件的归类不够人性化,比如jpg和jpeg都是图片,差别不大
4、谨慎使用,防止将不必要的文件进行移动,如:项目文件。
5、欢迎指正