很久很久以前(二十七天吧……大概)被要求写一个脚本来检索并解压磁盘上所有的以特定格式命名的tar文件,于是乎学习和摸鱼就一起开始了。

这次要写的脚本,针对的是这样的文件结构:

文件结构如上图所示

可以看到一个tar包里面套着两个tgz压缩包,我需要完成如下图所示的工作:

PressOn是个好东西

在Python中,有两个可以调用系统指令的包,一个叫做sys,一个叫做os。比较棒的是它们在高级语言层面上是不区分操作系统的,同样一个变量 curdir 在 linux 下和在 win下都能拿到针对此操作系统可用的路径。而os.system() 或者 os.popen() 都可以完成将括号内带的参数变成系统使用的指令的工作,只要给出的指令是正确的。

在此次脚本编写中我学到一些新鲜玩意,在这里记录下来便于自己查阅。

 #! usr/bin/python
import sys
import re
import os errorMsg = "Usage: python unzipAutoTriage.py [File location]. If File location was ommitted, script will work at current location." if len(sys.argv) == 1:
msg = raw_input("No arguments, script will work at current path(y/n):")
if msg != "y":
sys.exit(errorMsg)
path = "."
elif len(sys.argv) >= 3:
if re.match(r'~?[a-zA-Z/\_.]*',sys.argv[1]) != None:
print "Too many arguments, do you want to execute in", sys.argv[1], "(y/n):"
msg = raw_input()
if msg != "y":
sys.exit(errorMsg)
else:
path = sys.argv[1]
print path command = "find " + path + " -mount -name 'auto_triage*.tar'"
filelist = os.popen(command).readlines()
status = dict.fromkeys(filelist,"Not complete") # 创建一个字典用于保存每个文件的处理状态
print "Found" , len(filelist) , "File"
if len(filelist) <= 0:
sys.exit("No such file, exiting....") rootPath = os.path.abspath(os.curdir) # 保存一下运行起始目录,之后需要回来才能继续进行操作 for path in filelist:
command = re.sub(r'auto.*.tar$','',path).replace("\n",'')
if os.path.abspath(os.curdir).split("/")[-1] != command.split("/")[-1]:
os.chdir(command) # 更换目录不能用os.system("cd xxxx")这种方法,过不去的……
print "unzipping", path
command = "tar -xvf " + re.sub(r'^\..*/auto','auto',path)
res = os.system(command)
if res == 0:
flag = 2
for item in ["spa","spb"]:
print "extracting ",item
command = "tar -xzvf " + path + item + ".service_dc.tgz -C " + path
command = re.sub(r'.tar\n','/',command)
res = os.system(command)
if res == 0:
flag -= flag # Python逻辑里面可没有什么自增自减!
else:
status[path] = str(flag) + " unzip subprogress failed"
if flag == 0:
status[path] = "completed"
else:
status[path] = "Failed"
os.chdir(rootPath)
print "****************\nStatus report\n****************"
for key,value in status.items():
print '{key}Status: {value}'.format(key = key, value = value)

具体踩到的一些坑,就记载到 https://www.cnblogs.com/jackablack/p/10614686.html 采坑合集里面吧!

[2019.04.16] 由Python写成的自动解压脚本的更多相关文章

  1. python项目1:自动解压并删除压缩包

    目的:实现压缩包的自动解压及删除. 思路:获取压缩包 > 解压 > 删除压缩包 代码实现:此处代码实现前提为.py文件和压缩包在同一文件夹 # 导入需要的包 import os impor ...

  2. 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...

  3. python 模块zlib 压缩与解压

    例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zli ...

  4. linux下压缩成zip文件解压zip文件

    linux  zip命令的基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] linux  zip命令参数列表: -a     将文件转成ASCII模式 -F     尝试修复损坏 ...

  5. python对文件的压缩解压

    python自带的zipfile的模块支持对文件的压缩和解压操作 zipfilp.ZipFile 表示创建一个zip对象 zipfile.ZipFile(file[, mode[, compressi ...

  6. 2019.04.16 python基础50

    第五十一节  pycharm安装 https://www.jetbrains.com/pycharm/download/#section=windows 这是另一个叫jetbrains公司开发的 默认 ...

  7. 2019.04.16打卡(java 数组)

    1.  要求输出数组中数据的平均值,并输出所有大于平均值的数据 代码 package block; import java.util.*; public class Average { public ...

  8. 自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万!

    大家好,今天又给大家带来了Python爬虫的分享,今天我们继续上次的问题,继续来研究一下虎牙平台的爬虫. 起因 写完上次的代码,我冒出有一个很有趣的想法,就是,我们可以使用selenium来完成虎牙自 ...

  9. python 写一个类似于top的监控脚本

    最近老板给提出一个需要,项目需求大致如下:      1.用树莓派作为网关,底层接多个ZigBee传感节点,网关把ZigBee传感节点采集到的信息通过串口接收汇总,并且发送给上层的HTTP Serve ...

随机推荐

  1. Keras入门(四)之利用CNN模型轻松破解网站验证码

    项目简介   在之前的文章keras入门(三)搭建CNN模型破解网站验证码中,笔者介绍介绍了如何用Keras来搭建CNN模型来破解网站的验证码,其中验证码含有字母和数字.   让我们一起回顾一下那篇文 ...

  2. C# 数组Array

    数组是对相同类型的一组数据的封装.数组定义的时候,要说明是对哪一种类型的封装,并且要指定长度. using System; using System.Collections.Generic; usin ...

  3. sql servse 查询当前库内表索引值

    PERCENT --a.id, THEN c.name ELSE '' END AS 表名, THEN a.name ELSE '' END AS 索引名称, d.name AS 列名, b.keyn ...

  4. C# 2进制、8进制、10进制、16进制...各种进制间的转换(三) 数值运算和位运算

    一.数值运算 各进制的数值计算很简单,把各进制数转换成 十进制数进行计算,然后再转换成原类型即可. 举例 :二进制之间的加法 /// <summary> /// 二进制之间的加法 /// ...

  5. 【Json】fastjson与jackson常用操作记录

    本文只是记录fastjson.jackson一些常用的操作方法,没作比较,网上写比较的文章很多啦. 1.对象转Json串 // fastjson String objStr = JSON.toJSON ...

  6. 2016年第七届蓝桥杯javaB组 试题 答案 解析

    1.煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤 ...

  7. Spring SpringMVC MyBatis配置笔记

    工程大致结构: project |-src |----pojo |--------Temp.java |----dao |--------TempDao.java |--------TempDao.x ...

  8. HTML中的Hack条件注释语句

    IE 条件注释判断语句是 IE 特有的功能,通过 HTML 注释中的条件语句能让不同的 IE 版本识别注释中的内容 自IE10起,标准模式不再支持条件注释 条件注释语句中可以是HTML.CSS也可以是 ...

  9. 应用shell脚本停启Tomcat

    最近在工作中频繁的操作多个tomcat,顺便就简单研究了一下 一. 简介 Shell 是一种与操作系统直接交互的程序,Unix系统中叫Bourne Shell,包括以下几种 Sh—Bourne She ...

  10. ORA-12520 TroubleShooting

      同事反馈他连接一个新搭建的测试数据库时,报"ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序"错误,在解决他这个问题时,顺便分析.总结一下ORA ...