查看“Python日志打包并压缩文件夹”的源代码
←
Python日志打包并压缩文件夹
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==最终版本== <pre> [root@ mon]# cat tarbz2log.py #!/usr/bin/python #-*- coding:utf-8 -* # 打包并删除原来目录 by evan 20170810 import os, tarfile , shutil , datetime mydate=(datetime.datetime.now() - datetime.timedelta(days=7)).strftime("%Y%m%d") mytarfile=mydate+'.tar.bz2' logdirs=['create','enter','levelup','login','reg','start'] os.chdir("/data/logs/yaklog/") def mymove(src,dest): shutil.move(src,dest) def make_tarbz2(tarname, srcdir): tar=tarfile.open(tarname, 'w:bz2') tar.add(srcdir,arcname=os.path.basename(srcdir)) tar.close() #有时在centos6 上不能用 def make_tarbz20(tarname, srcdir): with tarfile.open(tarname, 'w:bz2') as tar: tar.add(srcdir,arcname=os.path.basename(srcdir)) tar.close() if __name__=="__main__": for log in logdirs: mysrc="/data/logs/yaklog/"+log+'/'+mydate mydest="/data/logs/yaklog/"+log+'_bak' mymove(mysrc,mydest) os.chdir("/data/logs/yaklog/") for log in logdirs: os.chdir("/data/logs/yaklog/"+log+'_bak') #pass make_tarbz2(mytarfile,mydate) if os.path.exists(mytarfile) and os.path.exists(mydate): shutil.rmtree(mydate) </pre> ==需求== <pre> 把 create 里面过期的目录迁移到 create_bak并打包压缩 目录例子如下 ls /data/logs/yaklog/create/20170713/ create create_bak </pre> ==进化过程== <pre> 文件打包(tarfile模块) tarfile模块用于读写tar归档文件,它也可以同时实现压缩功能。与zipfile模块相比,tarfile模块 可以直接将一个目录进行归档并压缩。另外,tarfile模块提供的api更“面向对象”化。 ##原型 20170810 #!/usr/bin/python #-*- coding:utf-8 -* # 打包并删除原来的原目录 by evan import os, tarfile , shutil , datetime def make_tarbz2(tarname, srcdir): with tarfile.open(tarname, 'w:bz2') as tar: tar.add(srcdir,arcname=os.path.basename(srcdir)) tar.close() mydate=(datetime.datetime.now() - datetime.timedelta(days=2)).strftime("%Y%m%d") mytarfile=mydate+'.tar.bz2' if __name__=="__main__": make_tarbz2(mytarfile,mydate) if os.path.exists(mytarfile) and os.path.exists(mydate): shutil.rmtree(mydate) # logdirs=['create','enter','levelup','login','reg','start'] In [51]: for loop in logdirs: ...: print loop def mymove(src,dest): shut.move(src,dest) os.chdir("/data/logs/yaklog/") 有变量就这样 分离出来就行了 终于聪明了一下下 mysrc="/data/logs/yaklog/"+mydate #解说 知识点一 arcname 在写打包代码的过程中,使用tar.add()增加文件时,会把文件本身的路径也加进去,加上arcname就能根据自己的命名规则将文件加入tar包 知识点二 basename #目录 In [3]: src='/data/mon' In [4]: os.path.basename(src) Out[4]: 'mon' 文件 In [14]: os.path.basename('/data/mon/tarbz2.py') Out[14]: 'tarbz2.py' 知识点四 shutil.rmtree shutil.rmtree('/tmp/myprog2') # 删除一个目录(包括子目录和文件 知识点五 os.path.exists #判断目录和文件都用这个 if not os.path.exists(target_dir): os.makedirs(target_dir, 0755); 知识点六 datetime #前天 import datetime In [3]: (datetime.datetime.now() - datetime.timedelta(days=2)).strftime("%Y%m%d") Out[3]: '20170807' 知识点七 glob In [13]: glob.glob('*.py') Out[13]: ['tarbz2.py'] 知识点八 import os, tarfile #一次性打包整个根目录。空子目录会被打包。 #如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。 def make_targz(output_filename, source_dir): with tarfile.open(output_filename, "w:gz") as tar: tar.add(source_dir, arcname=os.path.basename(source_dir)) #逐个添加文件打包,未打包空子目录。可过滤文件。 #如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。 def make_targz_one_by_one(output_filename, source_dir): tar = tarfile.open(output_filename,"w:gz") for root,dir,files in os.walk(source_dir): for file in files: pathfile = os.path.join(root, file) tar.add(pathfile) tar.close() </pre> ==trouble shooting== <pre> 问题一 AttributeError: 'str' object has no attribute 'open' 原来是自己的命令(tarfile)和系统自己的名字同名了 哈哈 谢谢不死 一开始以为这个呢 tarfile.open(filename 的第一个参数 不能为 str evan@evanpc:~/test$ ./tarbz2.py <type 'module'> 问题二 [root@ mon]# ./tarbz2log.py Traceback (most recent call last): File "./tarbz2log.py", line 31, in <module> make_tarbz2(mytarfile,mydate) File "./tarbz2log.py", line 15, in make_tarbz2 with tarfile.open(tarname, 'w:bz2') as tar: AttributeError: 'TarFile' object has no attribute '__exit__' #在线上报错了 一开始还以为要py2.7呢 最终是 去掉with 语句就好了 改为 tar=open 什么的 </pre> ==参考== [http://walkerqt.blog.51cto.com/1310630/1719427 Python打包文件夹(zip/tar/tar.gz)] [http://m.jb51.net/article/92842.htm Python打包文件夹的方法小结(zip,tar,tar.gz等)] [http://www.cnblogs.com/yyds/p/6427349.html Python之文件与目录操作(os、zipfile、tarfile、shutil)] [http://www.runoob.com/python/python-for-loop.html for loop] [http://blog.csdn.net/chenyulancn/article/details/49447019 Python中使用tarfile压缩、解压tar归档文件示例] [http://essen.iteye.com/blog/1941489 python tarfile-打包解包] [http://walkerqt.blog.51cto.com/1310630/1719427 Python打包文件夹(zip/tar/tar.gz)] [http://www.cnblogs.com/CLTANG/archive/2011/11/15/2249257.html Shutil模块介绍(有源码讲解)] [http://www.runoob.com/python/python-date-time.html Python 日期和时间] [http://www.cnblogs.com/dplearning/p/5942602.html 【python】datetime获取日期,前一天日期] [http://www.cnblogs.com/yyds/p/6427349.html Python之文件与目录操作(os、zipfile、tarfile、shutil)] [https://github.com/zlotus/doc_mac_from_zer0/blob/master/python/python_file_directory.md shutil文件操作] [http://www.python88.com/topic/2805 Python判断文件是否存在的三种方法] [https://segmentfault.com/q/1010000006175825 如何使用tarfile实现目录过滤的打包文件] [http://devopstarter.info/xue-xi-saltyuan-ma-zhi-hui-zhi-pythonxin-hao-liang/ 学习Salt源码智慧之Python信号量] with as http://blog.csdn.net/azhao_dn/article/details/7659276 https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/index.html [https://stackoverflow.com/questions/6086603/statement-with-and-tarfile Statement: with and tarfile] 另外的 zip [http://zeping.blog.51cto.com/6140112/1212742 zipfile和tarfile模块] [http://wolfchen.blog.51cto.com/2211749/1290229 python zipfile模块学习笔记(一)] [http://www.sharejs.com/codes/python/210# Python压缩和解压缩文件(zip/unzip)] [ http://www.cnblogs.com/PandaBamboo/p/3254449.html Python札记 -- 文件压缩] [http://wangwei007.blog.51cto.com/68019/1045577 python用zipfile模块打包文件或是目录、解压zip文件实例] [https://docs.python.org/2/library/zipfile.html zipfile] [https://python.freelycode.com/contribution/detail/568 在Python中压缩和解压文件] [[category:python]]
返回至
Python日志打包并压缩文件夹
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
我的导航
关于我
shell
python
ops
linuxchina.net
blog.linuxchina
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息