您的位置:首页 > 编程语言 > Python开发

Python实用工具介绍

2016-09-02 10:08 295 查看
1. Socket通信
server:
 
#coding:utf-8
from socket import *
from time import ctime

host = ''  #绑定的ip
port = 21567 #绑定的端口
addr = (host,port)

#套接字与连接协议,这里是tcp,socket.SOCK_DGRAM是udp.
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(addr)
tcpSerSock.listen(5)

while True:
print'waiting for connetion....'
#等待接收客户端请求,返回新的套接字与IP地址
connection,addr = tcpSerSock.accept()
print'...connetion from :',addr

whileTrue:
#
data = connection.recv(1024)
if not data:
break
s = 'say'
t = ctime()
#print addr,s,data
#sdata =  'servicer say on'
print addr,t,s,data
sdata = raw_input('> ')
cdata = 'sorry,I am so busy'
if sdata:
#                      connection.send(sdata)
connection.send('[%s] %s'% (ctime(),sdata))
else:
connection.send('[%s] %s'% (ctime(),cdata))

 

client:

from socket import *

host = '127.0.0.1' #server add
port = 21567
BUFSIZ = 1024
addr = (host,port)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(addr)

while True:
data =raw_input('> ')
if not data:
break
tcpCliSock.send(data)
data =tcpCliSock.recv(BUFSIZ)
if not data:
break

print data

tcpCliSock.close()


另 socket模块的其他用法: 
import socket
#获得主机名
socket.gethost()
#解析域名的ip地址
socet.gethostbyname(‘www.baidu.com’)
 
 
2. PIL库使用

import Image

# 打开一个jpg图像文件,注意路径要改成你自己的:
im = Image.open('/Users/iphone/Pictures/qiao.jpg')
# 获得图像尺寸:
w, h = im.size
# 缩放到50%:
im.thumbnail((w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('/Users/iphone/Pictures/qiao1.jpg','jpeg')
其他功能如切片、旋转、滤镜、输出文字、调色板等一应俱全。
比如,模糊效果也只需几行代码:import Image, ImageFilter
im = Image.open('/Users/iphone/Pictures/qiao.jpg')
im2 = im.filter(ImageFilter.BLUR)im2.save('/Users/iphone/Pictures/qiao2.jpg','jpeg')


示例是一个生成图片验证码的程序:
 
#encoding=utf-8
import Image, ImageDraw, ImageFont, ImageFilter
import random

# 随机字母:
def rndChar():
returnchr(random.randint(65, 90))

# 随机颜色1:
def rndColor():
return(random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
return(random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255,255))
# 创建Font对象:
font = ImageFont.truetype('/Library/Fonts/Arial.ttf',36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
for y inrange(height):
draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg');
image.show('code.jpg')


3. python 命令行程序调试工具,取代传统的print打印,使用模块pdb.
用pdb调试有多种方式可选:
 
1)  命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前
python -m pdb code.py(程序名)
 
2)  比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的
 
for x in range(width):
    for y inrange(height):
        importpdb
       pdb.set_trace()
        x =str(x) + y
       draw.point((x, y), fill=rndColor())
 
然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了。
 
参数介绍:
 
1)b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点
 
2)condition bpnumber [condition],设置条件断点,下面语句就是对第4个断点加上条件“a==3”
(Pdb) condition 4 a==3
 
3)cl(ear),如果后面带有参数,就是清除指定的断点;如果不带参数就是清除所有的断点
(Pdb) b
Num Type        Disp Enb   Where
4  breakpoint   keep yes   at /Users/iphone/git/yys-test/code.py:11
5  breakpoint   keep yes   at /Users/iphone/git/yys-test/code.py:15
(Pdb) cl 4
Deleted breakpoint 4
(Pdb) b
Num Type        Disp Enb   Where
5  breakpoint   keep yes   at /Users/iphone/git/yys-test/code.py:15
 
4)disable/enable,禁用/激活断点
(Pdb) disable 15
No breakpoint numbered 15
(Pdb) disable 5
(Pdb) b
Num Type        Disp Enb   Where
5   breakpoint   keep no   at /Users/iphone/git/yys-test/code.py:15
6  breakpoint   keep yes   at /Users/iphone/git/yys-test/code.py:7
7  breakpoint   keep yes   at /Users/iphone/git/yys-test/code.py:11
 
5)其他一些指令参数
n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的
 
s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中
c(ont(inue)),让程序正常运行,直到遇到断点
j(ump),让程序跳转到指定的行数
 
p,最有用的命令之一,打印某个变量
 
3. 时间转化与格式化
 
 importtime,datetime
#time 转为字符串形式
c80b
 printtime.strftime("%Y-%m-%d %X", time.localtime())
#字符串转为time形式
 t =time.strptime("2016 - 08 - 08", "%Y - %m - %d")
#将整数按年,月,日,时, 分, 秒的形式转为datetime类型
 d =datetime.datetime(2016,8,29,10,10,10)
 
符:
%a 英文星期简写
%A 英文星期的完全
%b 英文月份的简写
%B 英文月份的完全
%c 显示本地日期时间
%d 日期,取1-31
%H 小时, 0-23
%I 小时, 0-12
%m 月, 01 -12
%M 分钟,1-59
%j 年中当天的天数
%w 显示今天是星期几
%W 第几周
%x 当天日期
%X 本地的当天时间
%y 年份 00-99间
%Y 年份的完整拼写
 
 
 
4. 常用的python内建函数.
1)删减
T2.lstrip()移除字符串前面字符(默认空格),返回字符串
T2.rstrip()移除字符串后面字符(默认空格),返回字符串
T2.strip()移除字符串前后面空格,返回字符串默认空格,可以其他字符 S.strip('"')
 
2)切割
split([sep[,maxsplit]]),
#以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
rsplit([sep[,maxsplit]])#从右到左切割
 
3)变形
lower(),#全部小写
upper(),#全部小写
capitalize(),#首字母大写
swapcase(),#大小写交换
capwords(s)#每个单词第一个大写,其他小写
 
 
 
4)连接
join(seq)
join()  #它的功用是将可迭代的字符串序列连接成一条长字符串,如:
a= {‘a’:1, ‘b’:2, ‘c’:3}
b= ‘;’.join(‘%s=%s’%(k,v) for k,v in a.items())
printb
‘a=1;b=2;c=3’
 
5)查找
count(sub[, start[, end]]),#计算sub在S中出现的次数 
find(sub[, start[, end]]),#返回S中出现sub的第一个字母的标号,如果S中没有sub则返回-1。
index(substr[, start[, end]]),#与find()相同,只是在S中没有substr时,会返回一个运行时错误
find()----找到的第一个符合字符的index
rfind()-----找到最后一个符合的字符的index
备注:
find()函数族找不到时返回-1,index()函数族则抛出ValueError异常。
另,也可以用in和 not in操作符来判断字符串中是否存在某个模板
6)删除列表里的元素
L= [2,3]
pop()  #默认删除列表里的最后一个元素
L.pop()
[2]
delL[1] #表示删除列表L里的第二个元素
[2]
L.remove(3)#删除列表L里的某个值
[2]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 实用工具 介绍