PythonLogoBig

PythonLogoBig

DreamForce,最近闲的蛋疼,所以开始学习Python。

Why Python?

其实我也纠结了很久,比如有Perl,RUBY等等等等。可是最终选择了Python,因为Google也选择了Python,其实Python的语言很简洁明了,再加上它鲜明的版式编码,让我也觉得很新奇。

Python能做什么?

很多人都会问这个问题,Python是一个跨平台的脚本,我相信作为业内人士,这一句话已经够解释很多了。Dreamforce本人之所以要学习和应用Python是为了弥补JAVA某些领域的不足,比如我C/C++真的很菜,我不可能为了一款简单的桌面工具而花费极大的学习成本,毕竟这些工具的开发只是为了提高效率而已,并不是作为我的主流产品的开发线。

关于本案例:

本案例是DreamForce在工作中,利用闲余时间实施的一个自动化布署工具。 因为工作中的项目环境配置是很繁琐的事情,你需要配置很多很多变量,修改相应的文件配置,复制,建用户,导数据,然后还需要用Ant进行Jboss布署。 一般不熟悉的新同事可能会为此花上一天的时间。所以借着学习Python的东风,我就开始进行了此款工具的开发。

开发最终产品构想:

软件实体: 可执行EXE文件

操作易用性: 只需用户输入相关的路径,即可自动进行相关环境的安装和布署

Python3.2

Dreamforce本人选择了3.2,这个和2.7的API还是有很大的区别,不过网上很多人都是使用的2.7,终其原因是因为Google App Engine使用的也是2.7版本。

但是因为本人第一次安装就用的3.2,而且也写了数十行可行代码了,就真心不想改动版本。。。我一向不喜欢重复劳动。

安装:

Python的安装很简单,官网下个Install版的就可以了,你也可以配置相关的环境变量,方便调用。如果你要使用一些第三方的Python相关的组件,可能需要环境变量的支持。

IDE:

IDE有很多可以选择的,我喜欢用Eclipse+PyDev ,PyDev是Eclipse的插件

Python也有自带的Python IDLE,也有纯Python制作的Eric,都是不错的IDE选择。

代码风格:

之前我提过Python有着鲜明的版式要求,我其实在用之前也只知道有这个要求,后来写代码的时候才发现这里面大有文章。

比如下面的IF条件控制语句:

 

if a>1:
    call functionA
    call functionB
    call functionC

我写到这才发现不对劲了,其实B和C的调用根本不在这个IF判断里,完了,Python里没有花括号,怎么分离代码块呢? 如何告诉Python在哪里结束IF语句呢?

其实Python的代码块的划分就是通过版式进行划分的。

if a>1:
    call functionA
call functionB
call functionC

将B和C缩进和IF并列后,就可以了。这样的效果就是IF语句只会包含A函数。

2.7与3.2

2.7与3.2最大最明显最坑爹的区别在于一个Print函数,也就是很多人在刚入门的时候跑HelloWorld也跑不通的原因就在于此。因为大多数小白第一次都会下载3.2,可悲的是网上的
Hello World的教程都几乎是2.7的,所以很多人连HelloWorld都没有关就直接放弃了这门语言。我也很讨厌Python这种做法,语言的更新最好不要进行API的修改。

2.7: print ‘HelloWorld’
3.2: print(‘HelloWorld’)

SVN CheckOut

我这个工具的第一个任务就是进行SVN的Checkout,它会自动的下载最新版的项目文件。 那作为Python如何调用SVN呢?
作为Window平台来说,使用Shell脚本无疑是一个很不错的选择:

def checkout():
 cmd='svn checkout  %(url)s %(dist)s --username %(user)s --password %(pwd)s'%setting
 print ("execute %s"%cmd)
 return os.system(cmd)

上面这个函数块定义了SVN Checkout的操作, os.system是加载命令行操作,运行CMD相关字符命令。
同理,Python要调用ANT也是如此,这里就不多作介绍了

Oracle数据库操作

这个工具里有一项任务是调用Oracle建立相应用户以及导入相关数据,这里需要用到Oracle驱动(cx_Oracle),将该驱动引入Python脚本后,就可以开始进行数据库连接了

orcl = cx_Oracle.connect(sysdba, mode=cx_Oracle.SYSDBA)
 curs = orcl.cursor()
 try:
 curs.execute("CREATE OR REPLACE DIRECTORY LTDDUMP_DIR as '"+LTDDUMP_DIR+"'")
 print('>>>Log:CREATE OR REPLACE DIRECTORY LTDDUMP_DIR as ' + LTDDUMP_DIR)
 curs.close()
 except:
 print('This script has errors')
 curs.close()

上面这个代码块是用SYSDBA管理帐户连接Oracle数据库,然后定义一个数据库系统变量。 请注意一定在使用后关闭连接。

IO读写以及字符编码问题

如果要进行读的同时还要写的话,建议分别开启读和写的流

profileProperties = codecs.open('dreamforce.properties')
 writeFileHandle= codecs.open('Temp','w','utf-8')

然后,读一行写一行。。这是我的小方法,很蹩脚但实用,编码问题也可以很好的避免。

最后要注意的是读写流的拆箱与装箱

mLines = profileProperties.readline()
 curTxt = mLines.decode()
 writeFileHandle.write(curTxt)

此次要注意,在写的时候,需要写入的是字符串,而不是流,但在读取的时候得到的是流。

EXE打包

做到最后,考虑到程序的移植性问题,其它同事没有装上Python,怎么来运行呢? 其实很简单,将其转化为相应的EXE文件即可在Window平台上使用了。

一般来说Python3.2的可以考虑使用,CX_Freezer 这个算是比较好用的3.2的转换器了。如果是Python2.7的话,可以考虑使用Python2Exe.也是比较好用的~

此案例到此结束,Anything questions you can contact me freely . : dreamforce.me  or yangxin_xyx@163.com

2 Replies to “Python简单入门教程:使用Python提高工作效率”

  1. 新Python2Exe 也支持python3 ,我尝试CX_Freezer 不成功,反而是Python2Exe 成功了。
    不过我本来用python创建轻量级GUI的,发现tinter是TCL/TK写的,生成exe后比较大(压缩后还要5M以上,内存消耗>20M),我就直接学习tcl/tk了,问题是语法和GUI运行效率比较低(压缩后2M,内存消耗<8M),我又学习了lua+IUP,语法比较近C,运行效率比较高(不压缩1M,内存消耗<3M)

    PS: 我和你一样懒~

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: