[Intern][2019.04.16] 由Python写成的自动解压脚…
2019-04-18 09:00:45来源:博客园 阅读 ()
很久很久以前(二十七天吧……大概)被要求写一个脚本来检索并解压磁盘上所有的以特定格式命名的tar文件,于是乎学习和摸鱼就一起开始了。
这次要写的脚本,针对的是这样的文件结构:
文件结构如上图所示
可以看到一个tar包里面套着两个tgz压缩包,我需要完成如下图所示的工作:
PressOn是个好东西
在Python中,有两个可以调用系统指令的包,一个叫做sys,一个叫做os。比较棒的是它们在高级语言层面上是不区分操作系统的,同样一个变量 curdir 在 linux 下和在 win下都能拿到针对此操作系统可用的路径。而os.system() 或者 os.popen() 都可以完成将括号内带的参数变成系统使用的指令的工作,只要给出的指令是正确的。
在此次脚本编写中我学到一些新鲜玩意,在这里记录下来便于自己查阅。
1 #! usr/bin/python 2 import sys 3 import re 4 import os 5 6 errorMsg = "Usage: python unzipAutoTriage.py [File location]. If File location was ommitted, script will work at current location." 7 8 9 if len(sys.argv) == 1: 10 msg = raw_input("No arguments, script will work at current path(y/n):") 11 if msg != "y": 12 sys.exit(errorMsg) 13 path = "." 14 elif len(sys.argv) >= 3: 15 if re.match(r'~?[a-zA-Z/\_.]*',sys.argv[1]) != None: 16 print "Too many arguments, do you want to execute in", sys.argv[1], "(y/n):" 17 msg = raw_input() 18 if msg != "y": 19 sys.exit(errorMsg) 20 else: 21 path = sys.argv[1] 22 print path 23 24 command = "find " + path + " -mount -name 'auto_triage*.tar'" 25 filelist = os.popen(command).readlines() 26 status = dict.fromkeys(filelist,"Not complete") # 创建一个字典用于保存每个文件的处理状态 27 print "Found" , len(filelist) , "File" 28 if len(filelist) <= 0: 29 sys.exit("No such file, exiting....") 30 31 rootPath = os.path.abspath(os.curdir) # 保存一下运行起始目录,之后需要回来才能继续进行操作 32 33 for path in filelist: 34 command = re.sub(r'auto.*.tar$','',path).replace("\n",'') 35 if os.path.abspath(os.curdir).split("/")[-1] != command.split("/")[-1]: 36 os.chdir(command) # 更换目录不能用os.system("cd xxxx")这种方法,过不去的…… 37 print "unzipping", path 38 command = "tar -xvf " + re.sub(r'^\..*/auto','auto',path) 39 res = os.system(command) 40 if res == 0: 41 flag = 2 42 for item in ["spa","spb"]: 43 print "extracting ",item 44 command = "tar -xzvf " + path + item + ".service_dc.tgz -C " + path 45 command = re.sub(r'.tar\n','/',command) 46 res = os.system(command) 47 if res == 0: 48 flag -= flag # Python逻辑里面可没有什么自增自减! 49 else: 50 status[path] = str(flag) + " unzip subprogress failed" 51 if flag == 0: 52 status[path] = "completed" 53 else: 54 status[path] = "Failed" 55 os.chdir(rootPath) 56 print "****************\nStatus report\n****************" 57 for key,value in status.items(): 58 print '{key}Status: {value}'.format(key = key, value = value)
具体踩到的一些坑,就记载到 https://www.cnblogs.com/jackablack/p/10614686.html 采坑合集里面吧!
原文链接:https://www.cnblogs.com/jackablack/p/10717727.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash