Python番外篇:使用模块os+shutil 一键整理电脑文件

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的功能了,是不是很轻便,很容易修改?


好了,今天的课程就到这儿了,喜欢的点个赞点个关注,拜拜!

猜你喜欢

转载自blog.csdn.net/wangzirui32/article/details/113881614