在日常工作中操作计算机时会接触大量不同格式的文件,为方便检索文件,可以使用Python对其进行自动化整理,本文介绍如何通过python编程完成文件的自动分类,文件和文件夹的快速查找,重复文件的清理,图片格式的转换等常用工作。
一、文件的自动分类 如果工作中在同一文件夹中存在大量不同格式的文件,久而久之文件夹会变得杂乱无章,不利于文件检索查找。因此我们可以用Python编写程序,实现根据文件的扩展名将文件分类整理到不同的文件夹中 下图所示为用于举例的文件夹“要分类的文件”,可以看到该文件夹中的扩展名多种多样,有py、pbix、docx等。 Python的灵活性强,所以可以使用多种方法来实现文件的自动分类处理 1、使用os和shutil模块 os和shuti模块是python的内置模块
import os
import shutil
src_folder = 'F:\\代码文件\\自动化整理计算机文件\\要分类的文件\\'
des_folder = 'F:\\代码文件\\自动化整理计算机文件\\分类后的文件\\'
files = os.listdir(src_folder)
for i in files:
src_path = src_folder + i
if os.path.isfile(src_path):
des_path = des_folder + i.split('.')[-1]
if not os.path.exists(des_path):
os.makedirs(des_path)
shutil.move(src_path, des_path)
print('文件:'+i+'已移动到'+des_path)
os模块是用于和操作系统交互的一个内置模块,它提供了许多操作文件和文件夹的函数 ,可对文件或文件夹进行新建、删除、查看属性及查找路径等操作,除了使用os模块,其子模块path中的函数也是经常用到的。 shutil模块也是Python的一个内置模块,它提供函数对文件或文件夹进行移动,复制,压缩等操作。 代码第一,第二行用于指定要处理的源文件夹路径和存放处理后文件的目标文件夹路径 第三行os.listdir(src_folder)用于列出指定路径下的所有文件和子文件夹的名称。其中listdir()是os模块中的一个函数,其功能是返回指定文件夹下的所有文件和子文件夹的名称列表。但请注意listdir()函数返回的只是文件名,并不是文件完整路径。 获取了文件列表,通过遍历文件列表,然后使用if语句判断文件夹是否存在以文件扩展名命名的文件夹,如果不存在,则新建文件夹,再将文件移动到对应的文件夹中。 src_path = src_folder + i是将源文件夹路径与列表中的文件名拼接起来,当然也可以使用os.path.join(src_folder, i),此函数将两字符串中间以路径符进行拼接,若使用join时,记得将src_folder改为’F:\代码文件\自动化整理计算机文件\要分类的文件’ 目标文件夹路径的生成用到了split函数,通过将文件名分隔符将文件名字符串拆分为列表从而得到列表最后一个元素即为扩展名,以扩展名命名目标文件夹去归类文件 os.path.exists函数用于判断目标文件夹是否已经被创建过,如果不存在则使用makedirs函数进行目标文件夹的创建。 最后用shutil.move函数将文件移动到目标文件夹中
2、使用pathlib模块 pathlib模块也可以用来完成文件和文件夹路径的相关操作。pathlib模块从Python3.4开始引入,到Python3.6功能基本成熟,它以面向对象的思想来操作路径,使用灵活。
from pathlib import Path
src_folder = 'F:\\代码文件\\自动化整理计算机文件\\要分类的文件\\'
des_folder = 'F:\\代码文件\\自动化整理计算机文件\\分类后的文件\\'
files = src_folder.glob('*')
for i in files:
if i.is_file():
des_path = des_folder / i.suffix.strip('.')
if not des_path.exists():
des_path.mkdir(parents = True)
i.replace(des_path / i.name)
pathlib模块中的Path()函数,后面会用它创建路径对象。导入模块后,接着列出文件夹中要分类的所有文件的文件名。 使用路径对象的glob()函数可以在源文件夹下查找文件和子 文件夹,而listdir()函数返回的只是文件和子文件夹名称,而这里使用的glob()函数返回的则是文件和子文件夹的完整路径。并且glob()函数还支持利用通配符查找符合特定规则的文件或文件夹:‘*’可以匹配任意数量个(包括0个)字符,“?”可以匹配单个字符,“[]”可以匹配指定范围内的字符。 is_file()函数判断路径是否代表一个文件,如果是文件才进行后续操作。 路径对象的suffix属性提取文件的扩展名,得到类似‘.docx’,‘.xlsx’的字符串,再用字符串的strip()函数去除’.’,最后用pathlib模块特有的路径拼接运算符"/",将目标文件夹路径与扩展名字符串拼接起来。 使用路径对象的replace()函数将文件移动到与其扩展名对应的文件夹中。
|