[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 ...
随机推荐
- Java数组协变与范型不变性
变性是OOP语言不变的大坑,Java的数组协变就是其中的一口老坑.因为最近踩到了,便做一个记录.顺便也提一下范型的变性. 解释数组协变之前,先明确三个相关的概念,协变.不变和逆变. 一.协变.不变.逆 ...
- Javascript中双等号(==)隐性转换机制
在Javascript中判断相等关系有双等号(==)和三等号(===)两种.其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否完全相等). 因此有几个常识知识: 1.对于strin ...
- vs2015安装编辑神器:resharper10.0
在平时的开发工作中,作为一名程序员,难免会想办法找到适合自己的开发编辑器.这款插件来自JetBrains公司.接下来就来教大家如何对这款软件进行安装与破解. 1:首先下载与安装.如果没有找到适合的资源 ...
- Java多线程知识整理
多线程 1. 多线程基础 多线程状态转换图 普通方法介绍 yeild yeild,线程让步.是当前线程执行完后所有线程又统一回到同一起跑线.让自己或者其他线程运行,并不是单纯的让给其他线程. join ...
- .net 笔试面试总结(2)
在.net 中类(class) 与结构(Struct)的异同. Class 可以被实例化,属于引用类型,是分配在内存的堆上的.类是引用传递的. Struct 属于值类型,是分配在内存的栈上的.结构体是 ...
- 微信小程序 picker 中range-key的坑
<picker class='fr' bindchange="onChangeBuild" range-key="{{'num'}}" value=&qu ...
- git报错
-Initial commit Untracked files nothing added to commit but untracked 代码并没有被成功提交,看信息是文件没有被tracked gi ...
- Delphi中常用字符串处理函数
.copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回. 假设str为,)=,)='def' .concat(str1,str2{,strn}) 把各自变量连接起 ...
- php中curl返回false的解决办法
本文介绍一下自己在使用curl中遇到的问题解决办法.希望可以帮助到大家. 原文地址:代码汇个人博客 http://www.codehui.net/info/37.html 首先来看一个封装的curl函 ...
- 正则表达式,提取html标签的属性值
/** * 提取HTML标签的属性值 * @param source HTML标签内容 * "<a title=中国体育报 href=''>aaa</a><a ...