收藏 分销(赏)

python扩展模块.docx

上传人:xrp****65 文档编号:7602671 上传时间:2025-01-10 格式:DOCX 页数:15 大小:39.32KB 下载积分:10 金币
下载 相关 举报
python扩展模块.docx_第1页
第1页 / 共15页
python扩展模块.docx_第2页
第2页 / 共15页


点击查看更多>>
资源描述
一、扩展模块 ■ 影像扩展模块PIL(单独安装) 影像扩展模块需安装PIL V1.16(与python版本对应) 安装完毕后调用方式为: import Image # 注意首字母大写!! im = Image.open(r"d:\000.jpg") # 注意路径字符串的处理 row, col = im.size # 获取影像的尺寸 ■ 声音引擎pyTTS扩展模块(单独安装) 下载并安装pytts 3.0(for python 2.5版),然后使用以下代码即可发声!! import pyTTS # 注意大小写 tts = pyTTS.Create() # 注意首字母大写 tts.Speak("Mission Finished!") # 注意首字母大写 ■ Math库(系统自带) from math import * 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库(系统自带) import ftplib 1、ftp服务器的连接 ftp = ftplib.FTP("192.168.209.205") # 连接影响服务器,注意FTP要大写 print ftp.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矩阵对象,使用时容易弄混。 import numpy as np # 数组对象为array对象,而不是普通列表对象!! import scipy as sp 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、主对话框 from Tkinter import * # 注意Tkinter首字母大写 root = Tk() # 创建主窗口对象 root.title("标题") # 修改主窗口标题 root.mainloop() # 显示主窗口 2、使用系统对话框 import tkFileDialog # 使用文件选择对话框 fn = tkFileDialog.askopenfilename() # 注意返回fn为路径全名 import tkMessageBox 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) 四、文件相关操作 ■ 文件名操作 import os 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') ■ 文件外部操作 import os 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:\" for li in os.listdir(srcPath): fname = os.path.join(srcPath, li) if os.path.isfile(fname): …… ■ 二制文件的读写 from struct import * 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,通过 from datetime import *导入五个模块。 1、 date模块(很少用) from datetime import date # 导入date模块 d = date(2009, 6, 15) # 设置日期对象 d = date.today() # 获取当前时间 d.year; d.month; d.day # 获取对象的年,月,日 d.ctime() # 返回长日期字符串,如'Thu Jun 15 00:00:00 2009' d.format() # 返回 年月日 字符串,如'2009-6-15' d.isocalendar() # 返回 年月日 元组,如(2009,6,15) d.isoweekday() # 返回星期,周一至周日分别为1-7 d.weekday() # 返回星期,周一至周日分别为0-6 注:运算操作与datetime相同 2、 time模块(很少用) from datetime import time # 导入time模块 t = time(18) # 设置时间,分秒可选。不能获取当前时间!! t.hour; t.minute; t.second # 获取对象的时,分,秒 3、 timedelta模块(便于计算时间差) from datetime import timedelta # 导入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模块[最常用,推荐] from datetime import datetime # 导入datetime模块 d1 = datetime.now() # 获取当前日期 d1 = datetime.today() # 同上 d1.date() # 获取对象的年月日 d1.year; d1.month; d1.day # 获取对象的年,月,日 d.hour; d.minute; d.second # 获取对象的时,分,秒 d.ctime() # 返回长日期字符串,如'Thu Jun 15 00:00:00 2009' d.isoformat(' ') # 返回 年月日 字符串,如'2009-6-15 00: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-15 8: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);%H 24制小时(0-23);%I 12制小时(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 < dt < e # 返回True d1 - d2 # 两对象之间只能进行减法,比较预算 d1 > d2 # 比较 六、网页处理 网页处理使用HTMLParser模块,该模块有以下方法: reser() # 重置实例,在初始化时被隐式调用 feed(data) # 处理指定数据 close() # 强制处理所有缓冲数据 handle_starttag(tag, attrs) # 处理开始标记<tag>,其中tag是标记名称,attrs是名称、数值对的属性 handle_startendtag(tag, attrs) # 处理合并标记<tag.../>,同上 handle_endtag(tag) # 处理结束标记</tag>,其中tag是标记名称 handle_data(data) # 处理标记<tag>data</tag>之间数据 handle_comment(data) # 处理注释标记<!-- data -->之间的字符串 handle_decl(decl) # 处理文件开始的声明<! data>之间的内容 注意:tag名称参数是全部转换为小写字母的名称。 1、如果是现有的html文件,一般的处理方式为: fi = open("E:/Interim/保守配置.htm", "r") # 打开现有的htm文件 data = fi.read().replace("&nbsp;", " ") # 读取所有的数据,并替换空格 fi.close() # 关闭文件 pp = MyParser() # 初始化网页处理实例 pp.feed(data) # 处理数据 2、如果直接通过url,一般的处理方式为: 七、网络相关 import socket 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 import socket soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) soc.close() 注:使用以下方式可以把socket模块中所有属性带到当前命名空间,可缩短代码 from socket import * soc = socket(AF_INET, SOCK_STREAM) # 创建TCP的socket对象 soc.close() # 销毁socket对象 2、建立服务器和客户端连接 启动服务器端,等待连接(此时服务器端处于死循环状态,直道有人连接时为止): from socket import * soc = socket(AF_INET, SOCK_STREAM) # 创建TCP的socket对象 soc.bind(("127.0.0.1", 44443)) # 绑定指定地址(host, port) soc.listen(1) # 开始监听,连接数至少为1,队列已满则拒绝请求 con, adr = soc.accept() # 接受请求,调用accept会使socket处于阻塞状态waiting 启动客户端,开始连接(一旦连接成功,服务器将推出死循环状态): from socket import * soc = socket(AF_INET, SOCK_STREAM) soc.connect(("127.0.0.1", 44443)) 3、发送和接收字符串 验证连接,在服务器端发送信息: con.send("Hello!") 在客户端接受信息 soc.recv(1024) # recv(n, flag)其中n=2^i,如果数据量超过该值将被截断 端口号:为0—65 535之间的数值,但不能随意使用。0-1023的保留端口用于系统服务器,20 000—30 000的保留端口用于远程过程调用服务(RPC)。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服