标签:文件 办公自动化 desdir python glob 文件夹 整理 path os
前言
网上的一组教程,关于使用python进行办公自动化的。自己打算跟着来一遍,并记录一下。
正文
一、目标:文件自动分类
指定一个目录,根据文件的后缀名,创建文件夹并把相同后缀的文件放入该后缀名的文件夹中。
二、过程
2.1 使用参数
课程中指定的目录是在脚本中写死的,因为之前python入门,字符画和图片写字-老人与码-51CTO博客中介绍过脚本读取命令行参数的办法,所以这里我就继续采用了接受参数的方式:
import argparse
import os
#读取参数
parser = argparse.ArgumentParser() #创建一个实例
#添加参数
parser.add_argument('tardir',help='需要整理的文件夹')
parser.add_argument('desdir',help='分类后文件存放的文件夹')
#获取参数
args = parser.parse_args()
tardir = args.tardir
desdir = args.desdir
if not os.path.exists(desdir): #创建如果目的目录不存在创建 desdir
os.mkdir(desdir)
2.2 遍历目标目录,并根据后缀名移动文件
这里的思路就是遍历取的文件后:
- 先根据文件名的后缀去创建改后缀名的文件夹
- 把文件放入道对应的文件夹中
- 如果没有后缀,那么放到others里
用到了glob库和shutil,这里我只大概扫了一下glob的介绍,地址放下边了。
https://docs.python.org/zh-cn/3/library/glob.html
用到的方法:
glob.glob('{goal_dir}/**/*', recursive=True) --- 遍历文件夹和子文件夹(个人测试的时候第一个参数不接最后一个/*也是可以的,不知道区别)
shutil.copy(file,'path') --- 复制文件如用move则是移动文件
#遍历目标文件夹找出文件
for file in glob.glob('{}/**'.format(tardir),recursive=True):
if os.path.isfile(file): #判断是否是文件,如果是文件获得文件全名
filename = os.path.basename(file)
if '.' in filename: #获取文件的后缀
suffix = filename.split('.')[-1]
else:
suffic = 'others'
if not os.path.exists('{}/{}'.format(desdir,suffix)):
os.mkdir('{}/{}'.format(desdir,suffix))
shutil.copy(file,'{}/{}'.format(desdir,suffix))
以上就是全部的内容了。
三、一些思考
看完这个后,总觉有点怪,
可能就是感觉一个创建了某类型的文件夹后,再次遇到该类型文件还是会进行一个判断该类型文件夹是否存在的操作有点多余。
但是,也没有好的思路,要不就会多做一次遍历感觉,在网上看了看也都是大同小异的实现,那就先这样吧。
不过获取后缀的方法可以通过,os.path.splitext(path)来实现,不过需要注意的是它的返回,也还的做其他的操作才可以
In [1]: import os
In [2]: os.path.splitext(r'C:\Users\ytds\Desktop\MYTEST\2.jpg')
Out[2]: ('C:\\Users\\ytds\\Desktop\\MYTEST\\2', '.jpg')
fileName, extension = os.path.splitext(path)
extension = extension[1:] #这样切片后得到后缀
还有就是如果文件名中带有.(在linux比较常见的)那么就不会得到期待的值了,因为不管是os.path.splitext()还是上边的方法,都是以最后一个.为判断基础的。
标签:文件,办公自动化,desdir,python,glob,文件夹,整理,path,os 来源: https://blog.51cto.com/ytdsxushu/2727099
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。