很久很久以前(二十七天吧……大概)被要求写一个脚本来检索并解压磁盘上所有的以特定格式命名的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

[2019.04.16] 由Python写成的自动解压脚本相关推荐

  1. 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)

    很多朋友都有网购抢购限量商品的经历,有时候蹲点抢怎么也抢不到,今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本,以后再也不用拼手速拼网速啦,快来一起看看吧 1 问题背景 经过无数次抢购失 ...

  2. qq机器人自动回复带脚本可以实现吗_有人用Python写了个自动亏钱脚本,还能微信实时通知!

    本系列所有文章的开头都会用一两句话总结一下对应文章的内容.对这个话题感兴趣的话可以继续往下读,不感兴趣可以直接关掉,绝不浪费读者的时间. 总结 本篇文章用 Python 实现了一个简单的自动交易脚本, ...

  3. 有人用Python写了个自动亏钱脚本,还能微信实时通知!

    本系列所有文章的开头都会用一两句话总结一下对应文章的内容.对这个话题感兴趣的话可以继续往下读,不感兴趣可以直接关掉,绝不浪费读者的时间. 总结 本篇文章用 Python 实现了一个简单的自动交易脚本, ...

  4. python解压打开文件过多_自动解压大量压缩文件 Python 脚本 | 学步园

    之前写了一个自动解压压缩文件到压缩文件所在文件夹的脚本 后根据自己需要,写了另外两个.原理一样 都是使用winrar的命令 第一个脚本没考虑周到,只能解压rar文件 改进后可以支持winrar支持的各 ...

  5. 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”

    如何在MATLAB中调用"用Python写成的函数或脚本",首先要确保MATLAB知道咱们的Python解释器的位置在哪里. 如果安装了Python的时候把Python加入了系统环 ...

  6. 【电子邮件提醒】用python写个能发邮件的脚本

    [电子邮件提醒]用python写个能发邮件的脚本 文章目录 [电子邮件提醒]用python写个能发邮件的脚本 邮箱使用 使用python发邮件 封装一个发邮件的类 发邮件类 使用说明 前言 : 使用p ...

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

    Python Python开发 Python语言 自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万! 大家好,今天又给大家带来了Python爬虫的分享,今天我们继续上次的问题,继续来 ...

  8. python list转字符串_我用python写了个自动生成给文档生成索引的脚本!懒人智慧...

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

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

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

  10. 为了帮学姐完成了钢琴家梦想,我用Python写了一个自动弹钢琴脚本,轻松弹奏出《天空之城》

    人生苦短,我用Python 絮叨絮叨 效果展示 功能实现 代码实现 准备演奏 絮叨絮叨 事情是这样的,学姐马上要毕业了,前两天跟我彻夜长谈,还说自己一直有个钢琴家的梦想. 这不为了帮学姐圆梦,在我经过 ...

最新文章

  1. HTML中的div标签
  2. C语言用递归函数求1累加到100求和
  3. 数据库开发——MySQL——单表查询
  4. Leetcode 187.重复的DNA序列
  5. 前端学习(3220):props的简写方式
  6. 记录一次@Transactional问题处理
  7. VMware下Mac系统自适应屏幕
  8. Linux操作系统原理— 进程与线程管理
  9. 李宏毅机器学习笔记:机器学习介绍
  10. udp测试工具linux系统,网络测试工具下载_Packet Sender(UDP/TCP网络测试工具)
  11. 网站接入qq客服在线聊天
  12. 关于美颜滤镜您了解多少?
  13. android+微博点赞动画,模仿微博点赞动画
  14. 一只菜鸟的前端实习记录(碎碎念)
  15. 根据项目或WBS结算规则批量生成下阶WBS的结算规则-CJB2
  16. 【Verilog数字系统设计(夏雨闻)5-------模块的结构、数据类型、变量和基本运算符号1】
  17. 什么是盐加密 为什么使用盐加密密码
  18. 计算机软件标杆企业,张军平老师—人工智能专家,复旦大学教授,博士生导师,中国计算机协会人工智能专委会委员,软件学报和自动化学报责任编辑...
  19. 计算机病毒按危害程度分类可分为,计算机病毒按其危害程度可分为
  20. 2008年最精彩科技图片:电流运动模拟图居首

热门文章

  1. .net 导出excel_.NET Core一行代码导入导出Excel生成Word
  2. linux的df命令根目录,详细分析Linux df命令的使用方法
  3. MSSQL 构建函数提取指定的字符
  4. html调用rpst 源码_parseHTML 函数源码解析(四) AST 基本形成
  5. python中如何调用图像处理库_python怎么调用图像处理
  6. 用matlab解根3乘根2,数值计算课后习题答案--石瑞民.doc
  7. 计算机专业基础 -- Java语言相关基础知识
  8. 开源一套基于 React Naitve 的业务驱动型 UI 组件库:react-native-atlas
  9. python3之线程
  10. tween.js 中文使用指南