[2019.04.16] 由Python写成的自动解压脚本
很久很久以前(二十七天吧……大概)被要求写一个脚本来检索并解压磁盘上所有的以特定格式命名的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写成的自动解压脚本的更多相关文章
- python项目1:自动解压并删除压缩包
目的:实现压缩包的自动解压及删除. 思路:获取压缩包 > 解压 > 删除压缩包 代码实现:此处代码实现前提为.py文件和压缩包在同一文件夹 # 导入需要的包 import os impor ...
- 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本
我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...
- python 模块zlib 压缩与解压
例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zli ...
- linux下压缩成zip文件解压zip文件
linux zip命令的基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] linux zip命令参数列表: -a 将文件转成ASCII模式 -F 尝试修复损坏 ...
- python对文件的压缩解压
python自带的zipfile的模块支持对文件的压缩和解压操作 zipfilp.ZipFile 表示创建一个zip对象 zipfile.ZipFile(file[, mode[, compressi ...
- 2019.04.16 python基础50
第五十一节 pycharm安装 https://www.jetbrains.com/pycharm/download/#section=windows 这是另一个叫jetbrains公司开发的 默认 ...
- 2019.04.16打卡(java 数组)
1. 要求输出数组中数据的平均值,并输出所有大于平均值的数据 代码 package block; import java.util.*; public class Average { public ...
- 自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万!
大家好,今天又给大家带来了Python爬虫的分享,今天我们继续上次的问题,继续来研究一下虎牙平台的爬虫. 起因 写完上次的代码,我冒出有一个很有趣的想法,就是,我们可以使用selenium来完成虎牙自 ...
- python 写一个类似于top的监控脚本
最近老板给提出一个需要,项目需求大致如下: 1.用树莓派作为网关,底层接多个ZigBee传感节点,网关把ZigBee传感节点采集到的信息通过串口接收汇总,并且发送给上层的HTTP Serve ...
随机推荐
- dotnet core 微服务教程
这个教程主要是对于第一次使用dotnet core开发的同学. 运行环境是在centos 7 , 使用了docker容器. 即这是一篇运行在linux的docker容器上的微服务的简单应用. 一. 安 ...
- sql servse 查询当前库内表索引值
PERCENT --a.id, THEN c.name ELSE '' END AS 表名, THEN a.name ELSE '' END AS 索引名称, d.name AS 列名, b.keyn ...
- Java Calendar类使用总结
平时在浏览一些网站时,有些网站会显示出当前时间,如现在是xx年xx月xx日 xx时xx分xx秒,在实际的开发过程中,也会涉及到日期和时间的计算,Java中提供了一个专门的类Calendar来处理日期与 ...
- C++系列总结——多态
前言 封装隐藏了类内部细节,通过继承加虚函数的方式,我们还可以做到隐藏类之间的差异,这就是多态(运行时多态).多态意味一个接口有多种行为,今天就来说说C++的多态是怎么实现的. 编译时多态感觉没什么好 ...
- HotSpot 虚拟机垃圾回收算法实现
作为使用范围最广的虚拟机之一HotSpot,必须对垃圾回收算法的执行效率有严格的考量,只有这样才能保证虚拟机高效运行 枚举根节点 从可达性分析中从 GC Roots 节点找引用链这个操作为例,可以作为 ...
- Mac10.12下Python3.4调用oracle
最近,由于项目的短信平台对其它浏览器兼容,只支持IE,但是我们移动端自动化需要测试iphone手机,必须要连接MAC系统下,众所周知,MAC对IE的不友好性,故没办法通过短信平台在UI层自动化获取短信 ...
- What is “Neural Network”
Modern neuroscientists often discuss the brain as a type of computer. Neural networks aim to do the ...
- python使用rabbitMQ介绍四(路由模式)
一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...
- GlusterFS群集存储项目
最小化安装的centos7.5 内存大于1GB 关闭selinux,防火墙端口放行(port:24007,111)(测试建议关闭firewalld) 一.环境部署 所有软件包离线安装,原因是yum安装 ...
- 用jenkins创建节点
原料:(1)jre下载链接:https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html ( ...