Python做自动化项目的总结

最近项目上有自动化要求,我选择了用Python,对自己的代码能力提高很有帮助。
- 第一:学东西最快最有效的方法是“用起来”。
- 第二:通过将实际问题细分力度,用Python逐一解决,这样学到的知识掌握的深。
- 第三:不要忘了归纳总结,网上信息泛滥,有个地方能记录你的学习进度和学习心得,对IT从业人员是必要的技能。

心灵鸡汤说完了,这里我记录一下这次项目中用到的Python知识点和重点。

Python如何中途退出一个函数?

sys.exit(0)

Python如何判断文件(夹)存在?

os.path.exists(root_dir)

Python如何改变目录?

os.chdir(new_path)

Python如何延时?

time.sleep(30)

Python如何执行系统命令?

os.system('mycommand.bat')

Python如何判断文件扩展名?

file.endswith(".html")

Python如何清空一个文件夹?
def clean_dir(root_dir):
    """
    Function ...
more ...

requests+BeautifulSoup爬取双色球历史数据

练手入门级爬虫,利用requests+BeautifulSoup(美丽汤>_<)来爬取http://v2ex.com 网站上面的所有帖子,包括帖子标题,作者,时间,主要是正则表达式的学习:

#练习02:2014-11-01
#http://baidu.lecai.com/lottery/draw/list/50
#需求是获取http://baidu.lecai.com/lottery/draw/list/50 彩票网站上面开设双色球以来每一期的开奖日期,开奖期号,开奖号码,当期销量
#通过观察,发现该彩票网站上面包含2003~2014的数据,其url规律是:http://baidu.lecai.com/lottery/draw/list/50?d=2003-01-01
if ...
more ...

requests+BeautifulSoup爬取V2EX.COM网站所有帖子

练手入门级爬虫,利用requests+BeautifulSoup(美丽汤>_<)来爬取http://v2ex.com 网站上面的所有帖子,包括帖子标题,作者,时间,主要是正则表达式的学习:

#练习01:2014-10-26
#http://v2ex.com/t/\d+
#需求是获取v2ex网站上面所有的帖子标题,作者,时间
#通过观察,发现v2ex网站上面的帖子的url规律是:http://v2ex.com/t/ + 数字 【截至到写这个程序,v2ex一共有141542个帖子】
"""
if __name__ == "__main__":
    for x in range(1, 5710):   #一共有5710页
        req_html_doc = requests.get("http://v2ex.com/recent?p ...
more ...

BAT批处理现学现用

上篇说的是本人在实现报表自动化过程中用到的VBS知识,这篇我打算用来总结在此过程中用到的批处理知识。

批处理里面如何实现延时?

rem 巧妙地利用windows自带的ping命令来达到延时的目的
ping.exe /n 1 127.1>nul
批处理的用户输入校验模块 [这里是校验日期,格式:yyyymm]
@echo off
:input_module
echo Please enter date here:
set /p yyyymm=^<format:yyyymm^> (example:201301):
echo %yyyymm%|findstr ^[1-2][0-9][0-9][0-9][0-1][0-9 ...
more ...

VB Script现学现用

这几天需要实现一个报表自动化的功能,用到批处理BAT和VBS的知识,属于现学现用。各种谷歌百度。都说好记性不如烂笔头,我打算花一篇的篇幅来记录用到的VB Script知识,另外用一篇的篇幅来记录用到的BAT批处理知识。希望可以积少成多。
(注意:VBS跟VBA不是一个概念,VBA只有在开启Excel的时候才能运行。)

dim user_id, yyyymm, to_dte_       '定义变量
user_id = wscript.arguments(0)     '接收批处理传过来的第一个参数
CAP_user_id = Ucase(user_id)       '转换成大写
Select Case Mid(yyyymm,5,2)        'Select/Case的用法  字符串截取的方法                                         
Case "01"   
    ' do something here  
Case "02"                          'If-Then的用法,闰年的判断方法,=,<>,Mod的用法 ...
more ...

Watir给Amazon.cn充礼品卡

写个脚本去尝试不花钱给自己的Amazon.cn账号充礼品卡,碰碰运气。

#encoding: UTF-8                                          #添加这一行才可以处理中文
require 'rubygems'                                        #gem install xxx --no-ri --no-rdoc
require 'timeout'
require 'watir-webdriver'

def randCharOfLength(len)                                 #产生随机任意长度的数
    chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
    str = ""
    1.upto(len) {|i| str << chars[rand(chars.size-1)]}
    return str
end
b = Watir::Browser.new(:firefox ...
more ...

Watir获得sedo网站上指定后缀域名列表

作为一个’米农‘,sedo.com网站上面的信息很有价值。sedo.com是全球最大的域名交易网站。下面我写的这个脚本是用来取得sedo上面指定后缀(_如.asia)的所有域名列表。

#encoding: UTF-8                                          #添加这一行才可以处理中文
require 'rubygems'                                        #gem install xxx --no-ri --no-rdoc
require 'timeout'
require 'watir-webdriver'

#b=Watir::Browser.new(:firefox, {:profile => 'default'})
output =File.new("sedo_asia.txt",'w:UTF-8') 
def pre_work()
  $b=Watir::Browser.new :ff
  $b.driver.manage.timeouts.implicit_wait ...
more ...

Mainframe上随时查看任意库代码Rexx实现

Mainframe上面工作经常需要临时查看Production代码库当中的代码,又不希望输入长长的库名称。可以用REXX写一个Retrieve功能的脚本,放在 USERID.REXX.EXEC这个pds下面。运行的时候TSO RET your_program_name 即可随时查看。这里是这个RET程序的实现方法,原本是公司内部用的,由前辈们积累下来的财产,我见它有通用性和扩展性,故稍作修改简化后贴这里:

EDIT       IBMUSER.REXX.EXEC(RET) - 01.02                  Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
****** ***************************** Top of Data ******************************
000001 /* rexx */                                                              
000002 /*********** ret - retrieve specific member from multiple libs*********/
000003 arg ...
more ...

Watir登陆微博发布微博

#encoding: UTF-8                       #添加这一行才可以处理中文
require 'rubygems'                     #gem install xxx --no-ri --no-rdoc
require 'timeout'
require 'watir-webdriver'

b = Watir::Browser.new(:firefox, {:profile => 'default'})
b.goto 'www.weibo.com'
b.text_field(:class,"W_input").focus
b.text_field(:class,"W_input").set 'your_weibo_email_account'
b.div(:class, "inp password").text_field(:type,"password").set 'your_weibo_password'
b.link(:class ...
more ...

JCL提交REXX脚本

来说说如何用JCL提交REXX脚本。

1、写一个最简单的显示有一行提示的REXX脚本叫SAYHELLO

1 EDIT       IBMUSER.REXX.EXEC(SAYHELLO) - 01.00           Member SAYHELLO saved 
2 Command ===>                                                  Scroll ===> CSR  
3 ****** ***************************** Top of Data ******************************
4 000001 /******************************REXX*********************************/                
5 000002 SAY "I WILL PRINT 'HELLO' IN SYSTSPRT BY SUBMITTING JCL" 

2、写一个JCL如下IBMUSER.TEST.JCL(SAYHELLO):

EDIT       IBMUSER.TEST.JCL(SAYHELLO) - 01 ...
more ...