每天一划水,无事小神仙。
今天有个需求:服务器上有个文件夹,里面按日期生成了文件夹。工作日所在的文件夹内有需要我复制下来的文件。要求每个月取一次。
每月要翻三十个文件夹,找二十多个文件,让我手工复制是绝不可能的!🙂🙂🙂那必须要搞个脚本自己跑。
思路
1、服务器磁盘已映射(本地可直接访问)。
2、确定要批量扫描的文件夹名称(按日期命名的文件夹)。
3、根据要扫描的日期,按文件夹名进行遍历,找到要复制的文件。
4、在桌面创建一个文件夹,把找到的文件复制进去。
5、将复制出来的文件夹进行压缩。
过程
效果截图
要扫描的文件夹,不敢想象让我手工去复制要搞到什么时候~
代码批量执行还是很快的,输入要执行的区间即可。
执行结果完全符合预期😁😁😁
然后再自动生成压缩文件~
源码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 import osimport shutildef md (tp=None ): if os.path.exists(r'C:\\Users\\admin\\Desktop\\' +tp): pass else : os.makedirs(r'C:\\Users\\admin\\Desktop\\' +tp) return def rd (begindate,enddate ): for i in range (int (begindate),int (enddate)+1 ): if os.path.exists(r'Z:\\gildata\\FileSync\\Download\\gz\\' +str (i)): if os.path.exists(r'Z:\\gildata\\FileSync\\Download\\gz\\' +str (i)+'\\PAR_YIELDCURVE_ALL' +str (i)+'.dbf' ): shutil.copy('Z:\\gildata\\FileSync\\Download\\gz\\' +str (i)+'\\PAR_YIELDCURVE_ALL' +str (i)+'.dbf' ,'C:\\Users\\admin\\Desktop\\收益率曲线' ) print ('{}日的收益率曲线已完成复制' .format (i)) else : print ('无{}日的收益率曲线' .format (i)) else : print ('无{}日的聚源数据文件夹' .format (i))def zip_dir (dirname,zipfilename ): shutil.make_archive(zipfilename,'zip' ,root_dir=dirname)if __name__ == '__main__' : begindate = input ('请输入开始日期(格式:20220801):' ) enddate = input ('请输入结束日期(格式:20220831):' ) md("收益率曲线" ) print ('#####开始复制{}-{}的收益率曲线#####' .format (begindate,enddate)) rd(begindate,enddate) print ("#####开始创建压缩包#####" ) dirname='C:\\Users\\admin\\Desktop\\收益率曲线' zipfilename='C:\\Users\\admin\\Desktop\\收益率曲线{}-{}' .format (begindate,enddate) zip_dir(dirname, zipfilename) print ("#####任务执行完成#####" )
附:OS库基本用法整理
os是“operating system”的缩写,顾名思义,就是与操作系统相关的标准库。如:文件,目录,执行系统命令等。
工作路径
1 2 3 print (os.getcwd()) os.chdir(r"C:\Users\Administrator\Desktop\test" )
工作目录
1 2 3 4 5 6 7 8 9 10 print (os.listdir()) print (os.path.exists('modules' )) import osfor i, j, k in os.walk(os.getcwd()): print ("path =" , i) print ("List of directories =" , j) print ("List of files =" , k)
文件夹的增删
1 2 3 4 5 6 7 8 9 os.mkdir(r'C:\Users\Administrator\Desktop\test\testa' ) os.makedirs(r'C:\Users\Administrator\Desktop\test\testb' ) os.removedirs(r'C:\Users\Administrator\Desktop\test\testa' ) os.rmdir(r'C:\Users\Administrator\Desktop\test\testb' ) os.remove('test.txt' ) os.unlink('test2.txt' ) os.renames(r'C:\Users\a' ,r'C:\Users\test\b' ) os.rename("modules2" , "modules3" )
运行shell命令
获取文件大小
1 print (os.path.getsize('main.py' ))
打开到命令的管道或从命令打开管道
1 2 3 4 5 6 7 file_name=r'python C:\Users\Administrator\Desktop\test\a.py' file = os.popen(file_name,'w' ) file.writelines('print("hello world2!!!"' ) file = os.popen(file_name,'r' ) print (file.read()) file.close()
参考文档
Python OS Module - Python Geeks
附:shutil库基本用法整理
shutil 是 python 中的高级文件操作模块,与 os 模块形成互补的关系,os 主要提供了文件或文件夹的新建、删除、查看等方法,还提供了对文件以及目录的路径操作。shutil 模块提供了移动、复制、 压缩、解压等操作,恰好与 os 互补,os 和 shutil 一起使用,基本能完成所有文件的操作。是一个非常重要的模块。
复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 shutil.copy(r"C:\Users\Administrator\Desktop\case.txt" ,r"C:\Users\Administrator\Desktop\case" ) shutil.copyfile(r"C:\Users\Administrator\Desktop\case.txt" ,r"C:\Users\Administrator\Desktop\case\case3.txt" )''' shutil.copytree() 描述:复制整个目录及文件,不需要的文件类型可以不复制 语法:shutil.copytree(oripath, despath, ignore= shutil.ignore_patterns("*.xls", "*.doc")) 参数: oripath : "来源路径" despath : "目标路径" ignore : shutil.ignore_patterns() 是对内容进行忽略筛选,将对应的内容进行忽略。 ''' path1 = r'C:\Users\Administrator\Desktop\case' path2 = r'C:\Users\Administrator\Desktop\case1\copytree' shutil.copytree(path1,path2,ignore=shutil.ignore_patterns('case.txt' ,'*.DOC' ))
移动
1 2 shutil.move(r"C:\Users\Administrator\Desktop\case.txt" ,r"C:\Users\Administrator\Desktop\case" )
递归删除
1 2 shutil.rmtree(r"C:\Users\Administrator\Desktop\unpack" )
查看磁盘信息
1 2 print (shutil.disk_usage('d:' ))
压缩与解压缩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ''' shutil.make_archive 描述:压缩打包 语法:make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None) 压缩打包 base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径 format: 压缩或者打包格式 "zip", "tar", "bztar"or "gztar" root_dir : 将哪个目录或者文件打包(也就是源文件) ''' shutil.make_archive(r"C:\Users\Administrator\Desktop\a" ,'zip' ,root_dir=r"C:\Users\Administrator\Desktop\case" )''' shutil.unpack_archive 描述: 获取支持的压缩文件格式。目前支持的有:tar、zip、gztar、bztar。在Python3还多支持一种格式xztar 语法:unpack_archive(filename, extract_dir=None, format=None) filename:文件路径 extract_dir:解压至的文件夹路径。文件夹可以不存在,会自动生成 format:解压格式,默认为None,会根据扩展名自动选择解压格式 ''' shutil.unpack_archive(r"C:\Users\Administrator\Desktop\a.zip" ,r"C:\Users\Administrator\Desktop\unpack" )
参考文档
shutil — 高阶文件操作 — Python 3.10.7 文档