python扩展模块.docx
- 文档编号:4941837
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:8
- 大小:23.67KB
python扩展模块.docx
《python扩展模块.docx》由会员分享,可在线阅读,更多相关《python扩展模块.docx(8页珍藏版)》请在冰豆网上搜索。
python扩展模块
一、扩展模块
■影像扩展模块PIL(单独安装)
影像扩展模块需安装PILV1.16(与python版本对应)
安装完毕后调用方式为:
importImage#注意首字母大写!
!
im=Image.open(r"d:
\000.jpg")#注意路径字符串的处理
row,col=im.size#获取影像的尺寸
■声音引擎pyTTS扩展模块(单独安装)
下载并安装pytts3.0(forpython2.5版),然后使用以下代码即可发声!
!
importpyTTS#注意大小写
tts=pyTTS.Create()#注意首字母大写
tts.Speak("MissionFinished!
")#注意首字母大写
■Math库(系统自带)
frommathimport*
1、包含两个常数,pi,e注意小写
2、包含常用的算术运算:
floor,ceil,log,log10,exp,sqrt
3、包含常用的三角运算:
sin,cos,tan,asin,acos,atan,degree,radians
注意:
1、abs()为系统内置函数;2、numpy可以替代math实现所有功能!
!
■Random库(系统自带)
1、整型随机数:
randint(a,b)#生成[a,b)的整型浮点数
randrange(a,b,s)#生成[a,b)的整型浮点数
2、浮点随机数:
random()#生成[0,1)的浮点随机数
uniform(a,b)#生成[a,b)的浮点随机数
■FTP库(系统自带)
importftplib
1、ftp服务器的连接
ftp=ftplib.FTP("192.168.209.205")#连接影响服务器,注意FTP要大写
printftp.login("sino","801")#使用用户名登录
2、路径操作
ftp.cwd("/aaa/bbb//")#设置当前工作路径
ftp.mkd("/aaa/bbb/ccc//")#创建路径
ftp.rmk("/aaa/bbb/ccc//")#删除路径
ftp.pmd("/aaa/bbb//")#返回当前路径名
3、文件操作
ftp.rename(...)#文件更名
ftp.delete(...)#文件删除
二、数组/矩阵处理
早期有个包叫Numeric,后来有人写了numarray替代它,很快有人写了个numpy把两个包都替换了,现在有人在Numpy的基础上写了个Scipy,这个咚咚不错,可以完成80%的Matlab工作!
!
numpy是python用于科学计算的扩展模块,numpy提供ndarray和ufunc两个对象,主要提供数组对象、数组函数和傅立叶变换相关函数,Scipy则提供了更多计算工具。
注意:
scipy库依赖于numpy库,必须先安装numpy才能使用!
!
1、数组的定义
numpy中同时提供了array数组和matrix矩阵对象,使用时容易弄混。
importnumpyasnp#数组对象为array对象,而不是普通列表对象!
!
importscipyassp
a=np.array([[1,2],[3,4]],dtype=np.float)#通过列表创建数组
a=np.array(((1,2,3),(4,5,6)))#通过元组创建数组,效果相同
a=np.mat([[1,2,3],[4,5,6]])#通过列表创建矩阵
a=np.mat(((1,2,3),(4,5,6)))#通过元组创建矩阵
a=np.mat(array([[1,2,3],[4,5,6]]))#通过数组创建数组
b=np.arange(30)#通过类似range()创建一维数组
b=np.arange(2,3,0.1)#通过(起点,终点,步长)创建数组
b=np.linspace(2,3,10)#通过(起点,终点,个数)创建线性数组
b=np.logspace(2,3,5)#通过(起点,终点,个数)创建指数数组,很少用
c=np.zeros((3,5))#通过元组创建零矩阵
c=np.zeros_like(a)#通过类似创建
c=np.ones((3,5))#通过元组创建一矩阵
c=np.ones_like(a)#通过类似创建
c=np.eye(3,5)#注意单位阵创建方法,不是元组!
!
d=np.diag(a)#获取矩阵a的对角阵
d=np.tri(3,5)#生成3*5的下三角阵
d=np.tril(a)#获取矩阵a的下三角阵
d=np.triu(a)#获取矩阵a的上三角阵
2、数组常用属性
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
a.ndim#数组的维数,一维数组=1,二维数组=2
a.dtype#dtype('int32'),获取数组类型
a.size#12,获取数组总元素个数(个数=行*列)
a.itemsize#数组单个元素所占字节数
a.nbytes#数组总共所占字节数
a.shape#(3,4),获取数组的行列数
a.shape=4,3#将数组重排为4行3列,注意不是转置,且划分前后数组尺寸不变
a.shape=2,-1#使用-1自动计算行/列长度,相当于(2,6)
a.reshape((4,3))#同上,重新划分
3、数组常用操作
a.real;a.imag#返回数组的实部,虚部
a.T#矩阵转置
a.tolist()#数组转换为列表
a.flatten()#多维数组转一维数组
a.reshape(2,3)#一维数组转多维数组,创建新数组,自身不变!
!
a.resize(2,3)#同上,但直接改变自身!
!
a.transpose()#矩阵转置,同a.T
a.max();a.min();a.mean()#获取数组最大值,最小值,平均值
a.sum();a.prod()#获取数组所有元素之和,之积
a.cumsum();a.cumprod()#获取数组累加求和,累加求积
4、numpy可以替换math实现所有功能
pi,e#常数
sin(x);cos(x);tan(x)#三角函数
arcsin(x);arccos(x);arctan(x)#反三角函数,注意math库中使用asin,acos,atan
sinh(x);cosh(x);tanh(x)#
arcsinh(x);arccosh(x);arctanh(x)#
exp(x);log(x);log2(x);log10(x)#以e为底的指数;以e,2,10为底的对数
fix(x);round(x);floor(x);ceil(x)#舍入函数
sign(x);sqrt(x);square(x);#符号函数
real(x);imag(x);angle(x);conj(x)#实部;虚部;角度;共轭复数
三、对话框使用
VB中控件Control采用所见即所得方式,需人工调整对其方式;
python中控件Widget通过系统自动调整对其方式:
grid(常用),pack,place。
注:
使用TKinter时会出现讨厌的空白窗口,不能自动消除~~
1、主对话框
fromTkinterimport*#注意Tkinter首字母大写
root=Tk()#创建主窗口对象
root.title("标题")#修改主窗口标题
root.mainloop()#显示主窗口
2、使用系统对话框
importtkFileDialog#使用文件选择对话框
fn=tkFileDialog.askopenfilename()#注意返回fn为路径全名
importtkMessageBox
tkMessageBox.showinfo("Title","Message")#显示信息提示框
tkMessageBox.showwarning("Title","Message")#显示警告提示框
tkMessageBox.showerror("Title","Message")#显示错误提示框
b=tkMessageBox.askokcancel("Title","Message")#显示确定取消提示框,返回1,0
b=tkMessageBox.askyesno("Title","Message")#显示是否提示框,返回1,0
b=tkMessageBox.askquestion("Title","Message")#显示是否提示框,返回1,0
3、使用widget控件
控件类型包括:
Label(单行标签)Message(多行标签)Entry(单行输入框)Text(多行输入框)Button(按钮)
Radiobutton(单选框)CheckButton(多选框)Listbox(列表框)Frame(框架)
TopLevel(窗口)Menu(菜单栏)Canvas(画布)Scrolbar(滚动条)等
控件属性包括:
fg(前景色)bg(背景色)font(字体)text(内容)command(事件处理函数)等
wLab=Label(root,text="Show",fg="red")#创建一个红色文字的标签
wBtn=Button(root,text="OK",command=confirm)#创建一个OK按钮,点击时调用confirm()函数
注1:
颜色设置方式:
#RGB,#RRGGBB,#RRRGGGBBB,如w["fg"]=#FF0000,推荐使用第2种方式(0-255)
四、文件相关操作
■文件名操作
importos
fn="e:
\\tmp\\000.txt"#文件名中必须使用\\
os.path.dirname(fn)#获取路径名,返回e:
\tmp
os.path.basename(fn)#获取文件名,返回000.txt
os.path.exists(fn)#判断文件或路径是否存在,返回true/false
os.path.isdir(fn)#判断字符串路径是否存在
os.path.isfile(fn)#判断字符串文件名是否存在
os.path.join("c:
/tmp","000.txt")#将路径和文件名组合成路径名
三种分离方式
os.path.split(fn)#按路径分离,返回('e:
\\tmp','000.txt')
os.path.splitdrive(fn)#按驱动器分离,返回('e:
','\\tmp\\000.txt')
os.path.splitext(fn)#按后缀名分离,返回('e:
\\tmp\\000','.txt')
■文件外部操作
importos
os.mkdir("e:
\\0001")#创建指定路径
os.rmdir("e:
\\0001")#删除指定路径
os.remove("e:
\\001.txt")#删除指定文件
os.rename("e:
\\0001","e:
\\0002")#路径重命名
os.rename("e:
\\01.txt","e:
\\02.txt")#文件重命名
os.path.exists("e:
\\")#判断路径是否存在
os.path.exists("e:
\\00.txt")#判断文件是否存在
ArcGIS的文件操作
gp.exists("e:
\\001.shp")#判断文件是否存在
gp.delete("e:
\\001.shp")#可以将shp相关的文件全部删除
注意:
gp不能处理系统外未知文件格式,如自定义的dem格式。
■文件读写操作
f1=open("c:
\\temp.txt","r")#打开文件,"r"只读,"w"只写,"a"附加,"r+"读写
f2=open("c:
\\temp.txt","rb")#以二制方式打开文件,在以上模式后加b,"rb","wb","rb+"
s1=f1.read(100)#读取指定字节数,不指定字节数将读取整个文件
s2=f1.readline()#读取一行
lst=f1.readlines()#读取所有行到数组
f1.write(s1)#写入数据,写入行数据必须加"\n"
f1.seek(0)#定位到文件开始
f1.seek(5,2)#
f1.close()#关闭文件,释放资源
注:
直接获取文件内容的简单表达:
data=file("c:
/temp.txt").read(),open是file的别名,用file更直观!
!
■遍历文件夹下的所有文件
srcPath=r"d:
\"
forliinos.listdir(srcPath):
fname=os.path.join(srcPath,li)
ifos.path.isfile(fname):
……
■二制文件的读写
fromstructimport*
ss=pack("2h4s",1,2,"TEST")#将数字字符打包为二制码
n=calcsize("2h4s")#计算二制码字节数
a=unpack("2x1h4x",ss[0:
calcsize("2h4s")])#将二制码解压,只取第2个数值,其余丢弃
注:
1、二制码读写通常只用到pack,unpack,calcsize三个函数;
2、x填充位,c字符,s字符串,h/H短整型/无符号短整(2B),i/I整型/无符号整型(4B)
l/L长整型/无符号长整(4B),f浮点(4B),d双精度(8B)
3、每个字符前可以加数字表示多个,x表示不输出,注意字节数必须对应否则报错。
■获取当前py执行文件路径
fPath=os.path.dirname(sys.argv[0])#获取当前py文件路径
五、日期时间处理
日期时间处理有5个核心模块:
date,time,datetime,timedelta,tzinfo,通过fromdatetimeimport*导入五个模块。
1、date模块(很少用)
fromdatetimeimportdate#导入date模块
d=date(2009,6,15)#设置日期对象
d=date.today()#获取当前时间
d.year;d.month;d.day#获取对象的年,月,日
d.ctime()#返回长日期字符串,如'ThuJun1500:
00:
002009'
d.format()#返回年月日字符串,如'2009-6-15'
d.isocalendar()#返回年月日元组,如(2009,6,15)
d.isoweekday()#返回星期,周一至周日分别为1-7
d.weekday()#返回星期,周一至周日分别为0-6
注:
运算操作与datetime相同
2、time模块(很少用)
fromdatetimeimporttime#导入time模块
t=time(18)#设置时间,分秒可选。
不能获取当前时间!
!
t.hour;t.minute;t.second#获取对象的时,分,秒
3、timedelta模块(便于计算时间差)
fromdatetimeimporttimedelta#导入timedelta模块
dd=timedelta(12)#设置时间差为12天
dd=timedelta(12,3600)#设置时间差为12天3600秒
dd=timedelta(12,hours=3,minutes=5,seconds=18)#设置时间差为12天3时5分18秒
dd.days;dd.seconds#获取时间差的天数,秒数,注意小时、分秒不能直接获取!
!
dd1+dd2,dd1-dd2,dd1*3,dd1/3#时间差可以进行加、减、乘(天,秒均被乘)、除(天被除,秒不变)
4、datetime模块[最常用,推荐]
fromdatetimeimportdatetime#导入datetime模块
d1=datetime.now()#获取当前日期
d1=datetime.today()#同上
d1.date()#获取对象的年月日
d1.year;d1.month;d1.day#获取对象的年,月,日
d.hour;d.minute;d.second#获取对象的时,分,秒
d.ctime()#返回长日期字符串,如'ThuJun1500:
00:
002009'
d.isoformat('')#返回年月日字符串,如'2009-6-1500:
00:
00',缺省模式用T分隔
d.timetuple()#返回离散元组,如(2009,6,15,0,0,0,0,166,-1)
d.isocalendar()#返回年月日元组,如(2009,6,15)
d.isoweekday()#返回星期,周一至周日分别为1-7,√
d.weekday()#返回星期,周一至周日分别为0-6,不好用!
d1=date(2012,3,15)#直接设置日期,d1=date(2012,3,15)
d2=datetime(2012,3,15)#直接设置日期时间,d2=datetime(2012,3,15,0,0)
d1==d2;d1==d2.date()#前者返回False(不同的对象),后者返回True
a="2012-3-158:
05"#通过字符串输入时间
dt=datetime.strptime(a,"%Y-%m-%d%H:
%M")
dt.strftime("%H:
%M")#输出成字符串"8:
05"
注意:
strptime参数:
%Y四位年;%y两位年;%m月份(1-12);%d日期(1-31);%H24制小时(0-23);%I12制小时(1-12);%M分钟(0-59);%S秒数(0-59);
s=d2+timedelta(hours=7,minutes=15)#s=datetime(2012,3,15,7,15),days=3,可以省略只写数字3
e=d2.replace(hour=8,minute=30)#e=datetime(2012,3,15,8,30)
注意:
timedelta的关键词有s,replace的关键词没有s!
!
s
d1-d2#两对象之间只能进行减法,比较预算
d1>d2#比较
六、网页处理
网页处理使用HTMLParser模块,该模块有以下方法:
reser()#重置实例,在初始化时被隐式调用
feed(data)#处理指定数据
close()#强制处理所有缓冲数据
handle_starttag(tag,attrs)#处理开始标记
handle_startendtag(tag,attrs)#处理合并标记
handle_endtag(tag)#处理结束标记,其中tag是标记名称
handle_data(data)#处理标记
handle_comment(data)#处理注释标记
--data-->之间的字符串
handle_decl(decl)#处理文件开始的声明
data>之间的内容
注意:
tag名称参数是全部转换为小写字母的名称。
1、如果是现有的html文件,一般的处理方式为:
fi=open("E:
/Interim/保守配置.htm","r")#打开现有的htm文件
data=fi.read().replace(" ","")#读取所有的数据,并替换空格
fi.close()#关闭文件
pp=MyParser()#初始化网页处理实例
pp.feed(data)#处理数据
2、如果直接通过url,一般的处理方式为:
七、网络相关
importsocket
socket.gethostname()#获取当前主机名称,"sino"
socket.gethostbyname("")#获取指定主机的IP地址
socket.gethostbyname_ex("")#扩展,返回主要主机名,可选主机名,IP列表
socket.gethostbyaddr("202.165.102.205")#返回值同ex,通过address方式
socket.getservbyname("http","tcp")#返回http服务的端口号(通过tcp协议)
socket.getservbyname("telnet","tcp")#同上
1、创建和销毁socket
importsocket
soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc.close()
注:
使用以下方式可以把socket模块中所有属性带到当前命
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 扩展 模块
