Eclipse和PyDev搭建python开发环境
Eclipse和PyDev搭建python开发环境
1.1整体目标
本文档作为python学习者的新手教程,通过本教程能够了解python用途、语法、在实际工作中的应用。
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python是全然面向对象的语言。函数、模块、数字、字符串都是对象。而且全然支持继承、重载、派生、多继承,故意于增强源码的复用性。
Python在运行时,首先会将.py文件里的源码编译成Python的bytecode(字节码),然后再由Python
Virtual Machine(Python虚拟机)来运行这些编译好的byte
code。这样的机制的基本思想跟Java,.NET是一致的。
1.2读者对象
本文档供下面相关人员阅览:
參与软件系统开发的开发、測试、运维人员。
1.3參考文档
2.环境安装和配置
2.1下载软件
32位JDK6开发包
http://www.oracle.com/technetwork/java/javase/downloads/jdk6-jsp-136632.html
|
32位(与jdk6位数统一)Eclipse
http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/heliossr1
|
python2.7下载地址
https://www.python.org/download/releases/2.7
|
PyDev软件(能够下载,也能够在线安装)
|
注意:下载的软件与操作系统和电脑的位数统一就可以。
如一种搭配方式:
JDK 6 U17 64BIT for windows
Python 2.7
Eclipse 3.5.1 64bit for Windows
Pydev plug-in for Eclipse
|
2.2安装JDK6
一步步安装就可以。有点安装完须要配置环境变量,有的不须要。
2.3安装eclipse
绿色软件,解压就可以
2.4安装python
一步步安装就可以,注意环境变量
2.5给eclipse安装pydev插件
两种方式:
1.直接下载zip包
2.通过Eclipse自己主动更新PyDev。
第一种方式:可是,据说通过zip包安装可能会有不兼容的风险,我Eclipse为3.5版本号,下载了个1.6.3.2010100513.zip(6.6
MB)
解压后,将压缩包中的两个目录放置在Eclipse目录dropins目录下就可以。
执行非常顺利,详细配置请參考官方文档。
启动Eclipse>Preferences,在Preferences窗体左側菜单,选择InstallUpdate/Availabe
Software Site:
点击Add,添加�一个更新网站Name:Pydev Location:http://www.pydev.org/updates,然后确认OK:
返回Preferences界面,能够看到已经添加�了更新网站,确认OK:
在Eclipse菜单条点击Help>Install New Software…进入Install界面,在Work
with:下拉框选择添�的Pydev网站,点Next下一步:
Install界面列出将安装的插件,继续Next,然后允许协议,点OK開始安装:
安装完成后,提示重新启动Eclipse,确认重新启动.
2.6配置pydev插件
重新启动Eclipse后,再进入Preferences界面,在左側菜单条,选择Pydev>Interpreter-Python进行Python解释器的配置。假设操作系统已经安装了Python,可是点击Autoconfig仍然找不到的话,须要手工加入�。点击New…。在Select
Interpretor界面中输入解释器名和解释器Python.exe的路径,我装的是Python2.7,路径在D:\Dev\python\python.exe下。
2.7測试python语言的开发
在Eclipse主界面点击File>New>Project…
在project向导中,选择project类型Pydev>PydevProject:
假设project创建后不是在Pydev视图下,能够在Eclipse主界面菜单条中点击Window>OpenPerspective>Other…
,选择Pydev视图。
在project中新建一个Python Package(包),右键点击src, New>PydevPackage,选择源文件路径及输入包名:
在_init_.py,输入print (“Hello World”),按F9就可以看到输出结果,说明开发环境成功安装!
在/Pydev/src/com/siz/python文件夹上点击”Pydev Package”,相应的name输入HelloWorld,如图:
2.编写HelloWorld.py程序
\’\’\’
Created on 2014-4-21
@author: ShenFuLi
\’\’\’
print(“Hello
|
执行结果:
Hello world!!
3. python基本概念
Python的设计目标之中的一个是让代码具备高度的可阅读性。它设计时尽量使用其他语言常常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样须要反复书写声明语句,也不像它们的语法那样常常有特殊情况和惊喜。
Python开发人员有意让违反了缩进规则的程序不能通过编译,以此来强制程序猿养成良好的编程习惯。而且Python语言利用缩进表示语句块的開始和退出(Off-side规则),而非使用花括号或者某种keyword。添加�缩进表示语句块的開始,而降低缩进则表示语句块的退出。缩进成为了语法的一部分。比如if语句:
ifage<21:
print(“你不能买酒。“)
print(“只是你能买口香糖。“)
print(“这句话处於if语句块的外面。“)
|
依据PEP的规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定怎样,在实际编写中能够自己定义空格数,可是要满足每级缩进间空格数相等)。使用Tab字符和其他数目的空格尽管都能够编译通过,但不符合编码规范。支持Tab字符和其他数目的空格不过为兼容非常旧的的Python程序和某些有问题的编辑程序。
3.1凝视
\’\’\’
Created on 2014-4-22
@author: ShenFuli
\’\’\’
#单行的凝视是以#開始的
print(“单行的凝视是以#開始的.”);
\’\’\’
三引號字符串在python中是用来表示多行的字符串的
name:shenfl
age:20
\’\’\’
print(“name:shenfl,age:20”);
|
3.2缩进
python最有特色的地方就是他的缩进,并且是强制缩进。
无缩进出现编译错误
|
缩进程序正常
|
缩进用在函数定义,if ,for等语句的子语句中。缩束,如函数结束,if语句结束等等。
不要混合使用制表符(TAB)和空格(Space)来缩进。
3.3字符串
python中能够使用单引號(\’)和双引號(“)来表示字符串,这两者是全然等
同的。
\’\’\’
Created on 2014-4-22
@author: ShenFuLi
@description
python中能够使用单引號(\’)和双引號(“)来表示字符串,这两者是全然等同的。
\’\’\’
str1 =“双引號字符串 “;
print(str1);
str2 =\’单引號字符串
print(str2);
|
3.4变量、运算符与表达式
3.4.1变量
python中的变量不须要声明类型的,你直接使用=号赋值就能够了。变量能够是数字,
字符串, 布尔值 (True,Flase,注意大写和小写), 列表, 字典等类型。
3.4.2运算符与它们的使用方法
\’\’\’
Created on 2014-4-22
@author: ShenFuLi
@Description运算符与它们的使用方法
字符串str转换成int:
int转换成字符串str:
int ->unicode:unicode(int_value)
unicode ->int:int(unicode_value)
str ->unicode:unicode(str_value)
unicode ->str:str(unicode_value)
int ->str:str(int_value)
str ->int:int(str_value)
\’\’\’
print(“两个对象相加:
print(“两个数详进行减法:
print(“两个对象相乘:
print(“取整:
print(“除:
print(“取模:
\’\’\’
对象是否相等
\’\’\’
print(2==2);#True
print(\’2\’==\’2\’);#True
print(1!=2);#True
x =True;
print(not
a =True;
b =False;
print(aand
print(aor
#表达式:表达式就是将由变量,运算符等结合起来用来表达一种含义的式子。
t1 =4;
t2 =6;
print((t1 + t2)/2);#5.0
|
3.5控制语句
if语句,当条件成立时执行语句块。常常与else,
elif(相当于else if)配合使用。
for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每一个元素。
while语句,当条件为真时,循环执行语句块。
try语句。与except,finally配合使用处理在程序执行中出现的异常情况。
class语句。用于定义类型。
def语句。用于定义函数和类型的方法。
pass语句。表示此行为空,不执行不论什么操作。
assert语句。用于程序调适阶段时測试执行条件是否满足。
with语句。Python2.6以后定义的语法,在一个场景中执行语句块。比方,执行语句块前加密,然后在语句块执行退出后解密。
yield语句。在迭代器函数内使用,用于返回一个元素。自从Python
2.5版本号以后。这个语句变成一个运算符。
raise语句。制造一个错误。
import语句。导入一个模块或包。
fromimport语句。从包导入模块或从模块导入某个对象。
importas语句。将导入的对象赋值给一个变量。
in语句。推断一个对象是否在一个字符串/列表/元组里。
if语句
条件运行满足条件才运行,使用 if…. else….:语句。
#能够通过切换变量来验证每一种情况
x =3;
if(x==1):
print(“output
elif(x==2):
print(“out
else:
print
|
循环运行 for…
in…
\’\’\’
Created on 2014-4-22
@author: ShenFuLi
@description:
循环运行就是满足条件反复运行。使用最多的是 for …..in …
注意:
这里使用了一个内置函数
range(起始值,终止值,步长)
起始值缺省是
步长值缺省是
终止值是採用小于,而不是小于等于,所以是满足条件的是不包含终止值
\’\’\’
\’\’\’
输出结果:
0
1
2
3
4
\’\’\’
for xin
print(x);
print(“————————“)
\’\’\’
输出结果:
8
7
6
\’\’\’
for xin
print(x);
|
注意:
这里使用了一个内置函数 range().
range(起始值,终止值,步长)
起始值缺省是 0,能够不写
步长值缺省是 1,能够不写
终止值是採用小于,而不是小于等于,所以是满足条件的是不包含终止值
条件表达式语句…
格式:
while expression:
suite_to_repea
while循环的
suite_to_repeat子句会一直循环运行,直到
expression值为布尔假.这样的
类型的循环机制经常常使用在计数循环中,请參见样例.
#三元运算符
import sys
x =10;
y =20;
z = xif(x<y)else
print(z);#output
|
While语句…
\’\’\’
输出结果:
this count: 0
this count: 1
this count: 2
this count: 3
\’\’\’
count =0;
while(count<5):
print“this
if(count==3):
break;
count+=1;
|
break语句…
详细内容能够參考while语句中案例
|
continue语句…
类似Java中的continue,这里不再描写叙述。
|
pass语句…
#Python提供了
#这种代码结构在开发和调试时非常实用,由于编写代码的时候你可能要先把结构定下来
#在异常处理中也被经经常使用到
deffoo_func():
pass;
deffoo_func2():
pass
if __name__ ==“__main__”:
print(“—main—“)
foo_func();
foo_func2();
|
try….catch语句…
格式:
try:
xxxxx
except
Exception1[, reason1]:
xxxxx
finally:
xxxxx
x =2;
y =0;
while(True):
try:
z = x/y;
print
except
print“except—–“,e
finally:
print“finally—-“
break;
\’\’\’
输出结果:
except—– integer division or modulo by zero
finally—-
\’\’\’
|
3.6函数
函数是面向过程编程的重要组成部份,要没有函数,代码的可读性和可重用性上
都不会非常好。函数就是将一段逻辑相对独立,功能相对单一,又会在多处使用的代码,写成一函数,再须要时进行调用,而不须要在每一个地方都写一大堆反复代码。
格式:
def函数名(參数,參数):
实现语句
return …
注意:
1參数,和
return语句都不是必须的
2缩进须要注意
3局部变量
函数内部使用的变量,不影响外部的变量,即使变量同名。
4全局变量
全局变量就是在所以函数外部定义的变量。函数内部能够使用全局变量, 但要使
用 global声明。
\’\’\’
Created on 2014-4-22
@author: ShenFuLi
\’\’\’
name =“zhengwenjie“;
#定义函数
defsayHello(params):
global
print(“name
print(“您好,“
id =1000;
defprintId():
global
print(id);
id = id +1;
#定义主函数入口
if__name__==“__main__”:
sayHello(“沈福利“);#output
#main函数能够使用全局变量
print(“name
printId();#1000
printId();#1001
|
3.7常见的内置函数
len([string])
用来计算字符串,列表等对像的长度。
a =“love”;
print(len(a));#ouput
|
range()详见上文
str()
将对像转化成字符串
b =1000;
print(str(1000));#output
|
3.8容器
容器就是用来存放一些对像的数据结构。依据使用方式的不同,python提供了列表(List),元组(trupe),字典(dict)
3.8.1列表
用来动态的存放对像,能够插入,删除,更新。使用[ ]来给表示,看上去像
c的数组,用起来像 java的
list(不是非常准确,更像 vector,不做过多解释)
格式:
变量 a = [ ] #空的列表
变量 b =[1,3,4,5,\’iloveyou\’] #有值的列表, 元素能够是不同的类型
#定义空的列表
a = [];
print(a);#输出结果为[]
print(len(a));#输出结果为0
a.insert(0,2);
a.insert(1,4);
a.insert(2,8);
print(“———————“)
#索引元素:a.index(元素,開始,结束)
a_value = a.index(4,0,len(a)
print(“a_value:”
for vin
print(v);
|
3.8.2字典
字典就像是 java中的
map,依据一个键来相应一个对像。
定义:
变量 a={}
变量a={key1:value1,key2:value2}
#定义字典
#定义空的字典
b = {};
print(len(b));
#定义有数据的字典
b = {“x1”:“hello”,“x2”:“world”,“x3”:“1000”}
#加入�一个key/value到数据字典中
b[“x4”]
#输出数据字典中的数据
for xin
\’\’\’
输出结果为:
(\’x3\’, 1000)
(\’x2\’, \’world\’)
(\’x1\’, \’hello\’)
(\’x4\’, \’x4\’)
\’\’\’
print(x);
for key,valuein
\’\’\’
输出结果为:
key:x2, value:world
key:x3, value:1000
key:x1, value:hello
key:x4, value:x4
\’\’\’
print(“key:”
t2 = b.__contains__(“x3”);
if(t2 ==True):
print(“数据字典中key包括x3″)
|
4.文件操作
文件操作能够使用内置的函数 open来进行。
格式:
open(文件名称[,mode])返回一个文件对像。
“r”,读模式
“w”,写模式
“r+”,读写模式
|
文件对像的方法:
1. file.read(size):读取文件的
置 size,则读取整个文件。
2.file.readline():读取一行,返回一个
说明文件结束 Eof。
3.file.readlines():读取全部的行,返回一个
4.file.write(buffer):写
5.file.flush()强制写缓冲区的内容到文件
6.file.close()关闭文件
|
文件对象的属性:
file.name:文件名称
file.mode:文件打开的模式
|
实战演练
输出一个文本文件内容的程序。
\’\’\’
Created on 2014-4-22
@author: ShenFuLi
@Description :对文件操作
\’\’\’
#读取文件,返回文件对象
fileName =“pyFile.txt“;
file = open(fileName);
#调用文件方法
files = file.readlines();
for linein
print(line);
file.close();
\’\’\’
输出结果:
Hello World
welcome
\’\’\’
|
5. Python操作Oracle数据库
5.1 DB-AP
I 2 . 0 规范
python的 DB-API和 java的jdbc类似,都是一个规范.定义了
python中怎样操
作数据库的数据,然后由不同的数据库去实现不同的模块(jdbc里叫驱动).
參考规范http://www.python.org/dev/peps/pep-0249/对 DB_API2.0做个介绍.
5.1.1模块接口
connect()方法
全部符合 DB-API 2.0规范的模块都提供了connect()方法,用来连接数据库,返
回一个数据库连接对象 Connection.
格式:connect(參数
1,參数 2,..)
5.1.2Connection对象
.close()
关闭与数据库的连接,假设有数据没有提交,这部分数据就撤销掉。
.commit()
提交该连接的全部没有提交的事务.假设数据库支持自己主动提交,哪么最初应该是关掉这个功能的.数据库模块能够提供方法来打开自己主动提交功能.
.rollback()
撤销该连接
.cursor()
返回一个数据库游标,用来运行详细的数据库操作.
5.2 ora
cle ( cx_Oracle)
5.2.1cx_Oralce安装
Python 连接Oracle 数据库,须要使用cx_Oracle 包。
下载地址:http://sourceforge.net/projects/cx-oracle/files/5.1.1/
Window安装
cx_Oracle版本号:cx_Oracle-5.1.1-10g.win32-py2.7.msi
数据库版本号:Oracle10g
Python版本号:3.3
|
cx_Oralce是 pyton的oracle模块,使用前须要安装
oracle的 instantclient.
安装:instantclient推荐使用
10.2,能够使用字符串来连接数据库,不须要建立 dsn.
在 windows上直接解压,然后将文件夹添�到环境变量的
path中就可以.
Python连接Oracle须要安装instantclient_10_2并配置环境变量:
Centos安装
cx_Oracle版本号:cx_Oracle-5.1.1-10g-py27-1.i386.rpm
数据库版本号:Oracle10g
Python版本号:2.7
|
备注:下载的时候,注意版本号,对不同版本号的Oracle 和平台,都有不同的cx_Oracle。
5.2.2连接Oracle数据库
格式:username/password@主机
ip:port/实例名
db = cx_Oracle.connect(\’ngves3/asiainfo@192.168.204.135:1521/mydb\’)
|
或者
DSN_TNS = cx_Oracle.makedsn(db_host, db_port, db_base);
db = cx_Oracle.connect(db_user, db_pass, DSN_TNS);
|
实例:
# -*- coding:utf-8 -*-
import cx_Oracle
import sys
db_host =\’192.168.204.135\’
db_port =1521
db_base =\’mydb\’
db_user =\’ngves3\’
db_pass =\’asiainfo\’
DSN_TNS = cx_Oracle.makedsn(db_host, db_port,
db_query =“SELECT U_NO,U_NAME FROM ngves3.T_USER where
try:
#DSN_TNS:
print“DSN_TNS:”,DSN_TNS
db = cx_Oracle.connect(db_user, db_pass,DSN_TNS);
#username/password@主机
#db
cursor = db.cursor();
cursor.execute(db_query);
row = cursor.fetchall();
#定义列表
z = [];
for
for
sys.stdout.write(str(y)+”
except Exception, e:
print\’db
finally:
cursor.close();
db.close();
\’\’\’
输出结果:
AI001 shenfl1
\’\’\’
|
数据库:
|
5.2.3Python操作Oracle
Python操作Oracle程序:
# -*- coding:utf-8 -*-
\’\’\’
Created on 2014-4-25
@author:Shenfl
@Function:创建一张表,并插入一些数据,在改动当中的部分数据
\’\’\’
import cx_Oracle
import os
\’\’\’
@Function:连接数据库
@param dbname:数据库实例,默认初始数据mydb
\’\’\’
defconnectDB(dbname=“mydb“):
if(dbname==“mydb“):
conn =“ngves3/asiainfo@192.168.204.135:1521/mydb“;
db = cx_Oracle.connect(conn);
return
defcloseDB(db):
db.close();
\’\’\’
@Function:查询数据库
@param sql:sql语句
db:
\’\’\’
defsqlSelect(sql,db):
#include:select
cr=db.cursor();
cr.execute(sql);
rs=cr.fetchall();
cr.close();
return
\’\’\’
@Function:对数据库进行操作
@param sql:sql语句
db:
\’\’\’
defsqlDML(sql,db):
#include: insert,update,delete
cr=db.cursor()
cr.execute(sql)
cr.close()
db.commit()
\’\’\’
@Function:对数据库进行操作
@param sql:sql语句
params:查询參数
db:
\’\’\’
defsqlDML2(sql,params,db):
# executedml
cr=db.cursor();
cr.execute(sql,params);
cr.close();
db.commit();
\’\’\’
@Function:对数据库进行操作
@param sql:sql语句
db:
\’\’\’
defsqlDDL(sql,db):
#include: create
cr=db.cursor();
cr.execute(sql);
cr.close();
db.commit();
if __name__==\’__main__\’:
print“This
os.environ[\’NLS_LANG\’]=\’SIMPLIFIED
#connect to database
db = connectDB();
#create table
sql_create =“create
try:
#sqlDDL(sql_create,db);
print“create
except
#the output result is ORA-00955: name
print
# delete data before insert data to table
sql =“truncate
sqlDDL(sql, db);
print(“truncate
#insert data to table py_test:方案一
sql =“insert
sqlDDL(sql, db);
print(“方案一:insert
#insert data to table py_test:方案二
dt=[{\’id\’:2,\’name\’:\’zhangsan\’,\’phone\’:138888888888},
{\’id\’:3,\’name\’:\’lisi\’,\’phone\’:13888888888},
{\’id\’:4,\’name\’:\’shenfl\’,\’phone\’:13888888888}]
sql=\’insert
for
\’\’\’
输出结果:
{\’phone\’: 138888888888L, \’id\’: 2, \’name\’: \’zhangsan\’}
{\’phone\’: 13888888888L, \’id\’: 3, \’name\’: \’lisi\’}
{\’phone\’: 13888888888L, \’id\’: 4, \’name\’: \’shenfl\’}
\’\’\’
print(x);
sqlDML2(sql,x,db);
print(“方案二:
#select the result:
sql =“select
rs = sqlSelect(sql, db);
print“数据查询结果:“
for
print
#数据操作完成后完成数据库
closeDB(db);
|
运行结果:
This is a test python program,write by shenfl!
create table success!
truncate py_test success!
方案一:insert data to table py_test success!
{\’phone\’: 138888888888L, \’id\’: 2, \’name\’: \’zhangsan\’}
{\’phone\’: 13888888888L, \’id\’: 3, \’name\’: \’lisi\’}
{\’phone\’: 13888888888L, \’id\’: 4, \’name\’: \’shenfl\’}
方案二: insert data to table py_test success!
数据查询结果:
(1, \’shenfl\’, 110)
(2, \’zhangsan\’, 138888888888L)
(3, \’lisi\’, 13888888888L)
(4, \’shenfl\’, 13888888888L)
|
数据库结果验证:
select *from py_test;
ID NAME PHONE
1 shenfl 110
2 zhangsan 138888888888
3 lisi 13888888888
4 shenfl 13888888888
|
6.python经常使用内置函数
6.1创建文件夹
创建文件夹程序代码
# -*- coding:utf-8 -*-
\’\’\’
Created on 2014-5-14
@author:shenfl
\’\’\’
import datetime
import os
ROOT_HISTORY =“”;
defnew_dir(dst_dir):
try:
if
pass;
else:
#os.mkdir(dst_dir);
os.makedirs(dst_dir);
except:
print“makedir
if __name__ ==“__main__”:
history = ROOT_HISTORY;
format =\’%Y-%m-%d
print“make
dst_dir =“%s/ware.%s”
new_dir(“data/html/current”);
|
结果验证
6.2join函数
格式:string.join(list,seq);
參数:list切割集合
seq切割符号
使用“分号”连接集合中内容:
# -*- coding:utf-8 -*-
import string
words=[“aaa“,“bbb“];
a = string.join(words,“;”);
print a;#aaa;bbb
|
使用?连接集合中内容:
b =“?”.join([“hello”,“world”]);
print b;#hello?world
|
6.2Queue
队列实例分别有下面操作方法:
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.put(item)写入队列,timeout等待时间
Queue.join()实际上意味着等到队列为空,再运行别的操作
join()保持堵塞状态,直到处理了队列中的全部项目为止
7.常见问题
问题一、python遇到syntaxerror:
non-ascii character \’/xd6\’ in file
解决方式:文件开头添加� #
-*- coding: utf-8 -*-
案例:代码内容如
# -*- coding:utf-8 -*-
print(“Hello
print(“欢迎来到python世界!!!“);
|
问题二、安装cx_Oracle,在python里面import
cx_Oracle,提示错误。
操作步骤:运行python.exe
>>>import cx_Oracle
Traceback (most recent call last):
File “<pyshell#0>”, line 1, in <module>
import cx_Oracle
ImportError: DLL load failed: 找不到指定的模块。
解决方式:复制oci.dll到$python_home (比方D:\Dev\python),解决。又一次打开后如图:
问题三、Oracle数据库服务端中文查询正常,可是sqlplusclient乱码
解决方式:配置系统变量
|