[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 ...
随机推荐
- 自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]
介绍 我很早之前一直在做mvc5 scaffolder的开发功能做的已经非常完善,使用代码对mvc5的项目开发效率确实能成倍的提高,就算是刚进团队的新成员也能很快上手,如果你感兴趣 可以参考 http ...
- C# 连接/查询Jira
查询jira数据,如果是前端,可以按照如下格式直接访问,获取数据 http://jira.company.com/rest/api/2/search?jql=project = REM AND res ...
- 在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用
问题描述 在传统的基于 .NET Framework 的 WPF 程序中,我们可以使用如下代码段启动相关的默认应用: # 启动默认文本编辑器打开 helloworld.txt Process.Star ...
- tomcat,httpd 日志格式说明
tomcat 日志说明 配置文件server.xml 默认日志格式为 pattern="%h %l %u %t "%r" %s %b" 推荐使用 pattern ...
- Flutter项目之app升级方案
题接上篇的文章的项目,还是那个空货管理app.本篇文章用于讲解基于Flutter的app项目的升级方案. 在我接触Flutter之前,做过一个比较失败的基于DCloud的HTML5+技术的app,做过 ...
- extjs 倒计时
var interval = (new Date(selection[0].data.dealLimitTime).getTime() - new Date().getTime()) / 1000; ...
- There is already an object named '#xxxx' in the database.
这个案例是前几天同事遇到的一个案例,在存储过程中"删除"了一个临时表,然后重新创建这个临时表时遇到"There is already an object named 'x ...
- 开发环境---->服务器(数据库迁移Migration)
1.查找服务器环境迁移记录表的最近一次迁移名称 SELECT * FROM __efmigrationshistory; 最后一次:20190225075007_UpdateSocialApplyCo ...
- npm基本操作(安装,搭建环境,打包)
Nodejs(npm)环境安装: npm的安装配置(从nodejs网站上安装npm): Windows安装Nodejs操作步骤如下: 64 位安装包下载地址 : https://nodejs.org/ ...
- Vue插值文本换行问题
问题背景: 后端返回的字符串带有\n换行符,但Vue将其插值渲染成div内部文本后,文本并不换行,换行符显示为一个空格. 目标: 让文本在换行符处换行. 解决方法: 思路:实现文本换行有两种方法,一是 ...