hello,大家好,我是wangzirui32,今天我们来学习如何使用os+shutil模块一键整理电脑文件。
开始学习吧!
前言
最近,我电脑上的一个文件夹十分“乱”,所以我决定写一个Python小程序来整理亿下。
这就是我很“乱”的文件夹:
好了,开始编写代码!
1. 编写辅助模块module
首先,我们得编写一个辅助的整理模块,打开一个Python文件,命名为module.py。
1.1 Directory类
打开module.py,输入:
# 导入所需的模块
import os
import shutil
# 定义Directory类
class Directory():
def __init__(self, directory_name, file_suffix):
# 参数:文件夹名 文件后缀名
self.file_suffix = file_suffix
self.directory_name = directory_name
# 要保存的文件
self.file_list = []
def add_file(self, file_name):
# 获取文件后缀名 并判断是否在file_suffix列表中
if file_name.split('.')[-1] in self.file_suffix:
# 如果有 则添加到file_list
self.file_list.append(file_name)
return True
else:
return False
def save_files(self):
# 这个方法用于保存已经添加的文件
# 首先使用mkdir函数创建文件夹
os.mkdir(path + "\\" + self.directory_name)
for file in self.file_list:
# 再使用move函数一个一个移动文件
shutil.move(path + "\\" + file, path + "\\" + self.directory_name)
Directory类是为了方便文件的统一管理而定义的。首先,获取实参:要保存的文件夹的名称,文件后缀名(为列表)。文件后缀名这个参数是为了判断保存哪些后缀名符合要求的文件。
add_file(fille_name)传入一个文件名,根据这个文件的后缀名来判断是否存储,如果符合条件,加入存储列表,返回True,否则返回False。
save_files()用于保存添加到file_list的文件,先自动创建一个文件夹,名称为这个类的属性directory_name,然后遍历file_list,使用shutil.move函数移动文件到已经创建好的文件夹。
1.2 Directories类
为了更加方便管理,我又在module.py中添加了Directories类,方便每个Directory类的管理:
class Directories():
def __init__(self, *directories):
# 传入需要管理的Directory类 参数数量无限制
self.directories = directories
# 传入文件名
def add_file(self, file_name):
for directory in self.directories:
# 挨个执行Directory类中的add_file函数
# 直至符合存储条件
if directory.add_file(file_name):
break
# 遍历每个Directory类
# 并且执行Directory类的save_files函数保存
def save_files(self):
for directory in self.directories:
directory.save_files()
2. 编写主项目文件demo.py
首先,我们确定定义哪些Directory类,我根据文件夹中文件的后缀名,定义了5个变量在demo.py中:
# 导入
import os
from module import Directory, Directories
# 先把路径设置为你需要整理的文件夹的路径
path = r"C:\Python\Python整理文件\我的文件夹"
# Tips:这里后缀名只写了一个,你还可以根据需要添加多个,如图片文件['png', 'jpg']等
pic = Directory("图片", ['png'])
word = Directory("word文档", ['doc'])
xls = Directory('表格文件', ['xls'])
csv = Directory("csv文件", ['csv'])
txt = Directory("文本文件", ['txt'])
然后我们获取文件夹中所有的文件名:
files_name = os.listdir(path)
再定义一个管理的Directories类,传入所有需要管理的Directory类和路径:
directories = Directories(pic, word, xls, csv, txt)
最后使用for循环遍历文件名,并调用Directories类的add_file函数:
for file_name in files_name:
directories.add_file(file_name)
程序末尾,进行保存:
directories.save_files()
完整代码:
# 注意:module模块需要编写
import os
from module import Directory, Directories
path = r"C:\Python\Python整理文件\我的文件夹"
files_name = os.listdir(path)
pic = Directory("图片", ['png'])
word = Directory("word文档", ['doc'])
xls = Directory('表格文件', ['xls'])
csv = Directory("csv文件", ['csv'])
txt = Directory("文本文件", ['txt'])
directories = Directories(pic, word, xls, csv, txt)
for file_name in files_name:
directories.add_file(file_name)
directories.save_files()
3. 展示结果
运行代码,我的文件夹就被整理成这样了:
写在最后
这里说明一下,写那么复杂是为了方便修改程序,如果我想把PDF文件也分类,就可以直接在demo.py的代码中添加:
# 省去一些代码
csv = Directory("csv文件", ['csv'])
# 在csv后面添加新的代码
pdf = Directory("PDF文件", ['pdf'])
然后,修改传入Directories的参数:
directories = Directories(pic, word, xls, csv, txt, pdf) # 新加入pdf
这就可以给程序添加分类PDF的功能了,是不是很轻便,很容易修改?
好了,今天的课程就到这儿了,喜欢的点个赞点个关注,拜拜!