Tuesday, December 2, 2008

开帖学习笔记:记录学习python的各种应用,以免以后忘了。

















下面的例子都是在windows下完成的。



1,读取文本文件的每行(假定C:根目录下有一个test.txt文件)。



f = open("c:/test.txt")

while(True):

str = f.readline()

if str == "" : break

#TODO:your code here

print str

f.close()



2,使用glob模块进行查询指定的excel文件,并使用第三方模块xlrd(需要安装下载http://beauty.run-
to.com/TechDocs/Product/xlrd-0.5.2.tgz,先解压,安装时,使用命令行到xlrd解压目录内,使用命令
setup.py
install进行安装。以下同)解析excel文档。(注:py文件中要是有汉字,比如注释或字符串,那么在文件的头部加上#-*-
encoding:utf-8
-*-标志,就可以识别中文集了。不过需要注意的是,使用notepad在英文系统下保存时默认是ansi,所以应该使用notepad的另存为,然后
encoding选择utf-8而不是ansi,然后类型选择所有类型,保存成py文件,否则就算加了标志,显示的还是乱码,下同)。



#-*- encoding:utf-8 -*-

import xlrd

import types

import time

import os

import glob



def Calc(excelname) :



#open excel

book = xlrd.open_workbook(excelname)

#read first sheet

sh = book.sheet_by_index(0)

#read data from excel at first column

print excelname + ":"

for rx in range(sh.nrows) :

d = sh.cell_value(rowx=rx, colx=0)

print d





if __name__ == "__main__" :

#########

#xl*.xls匹配excel文件,并且该文件的文件名头两个字为xl

for excelname in glob.glob( 'xl*.xls' ) :

Calc(excelname)



3,xml的解析。



#!/usr/bin/python

#-*- encoding:utf-8 -*-



from xml.sax import make_parser

from xml.sax import ContentHandler

import string



class MyHandler(ContentHandler):



def startElement(self,name,attrs): #遇到元素开头时执行,如<para>

self.name = name

self.content = ""

def endElement(self,name): #遇到元素尾时执行,如</para>

print self.name + "=" + self.content

def characters(self,content): #获取元素内容

self.content = content

ch = MyHandler() #生成ContentHandler的实例

saxparser = make_parser() #创建sax处理器

saxparser.setContentHandler(ch) #关联

saxparser.parse('test.xml')



4,获取某个网站的网页内容(你可以通过这个例子写出抓取网络信息的程序)。

以下是到sina网站上获取当天的浦发银行的股票信息的代码。



import urllib

pg = urllib.urlopen('http://hq.sinajs.cn/list=sh600000')

cont = pg.read()

print cont



5,正则表达式的使用。



import re



p = re.compile('[a-z]+\d{3}')



str = "fasfnnhzc123aff;^%^Fsdfg sd"



m = p.match(str)



print m.group()



6,RPC远程过程调用的例子(分为服务端和客户端代码)。



这是服务端代码:

server.py:



import SimpleXMLRPCServer



#定义自己的CMS类

class MyCMS:

def getVersion(self):#向外公开版本的方法

return "Powerd By Python 0.1a"



cms = MyCMS()

server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))

server.register_instance(cms)



print "Listening on port 8888"

server.serve_forever()#服务器执行,并监听8888端口



这是客户端代码:

client.py:



import xmlrpclib



server = xmlrpclib.ServerProxy("http://localhost:8888")



version = server.getVersion()



print "version:"+version










zhougaomin_007
2007-11-29


创建文件夹以及判断文件是否存在:
import os

#创建test目录,注意不可嵌套创建,也就是要是C:/test目录
#不存在则不能创建子目录c:/test/test。
os.mkdir('c:/test')

dirFlag = os.path.exists('c:/test')

fileFlag = os.path.exists('c:/test/test.txt')









zhougaomin_007
2007-11-29


使用PIL图像处理模块:
import Image, ImageDraw, ImageFont
import ImageFilter
import ImageEnhance
from math import atan, degrees

#显示jpg(假定当前目录存在一个叫做Blue hills.jpg的图片)
im = Image.open("Blue hills.jpg")
im.show()

#缩小一半
nim = im.resize((im.size[0] / 2,im.size[1] / 2) ,Image.BILINEAR)
#如果要保存的话,下面注释打开即可
#nim.save("Blue hills Resize 2.jpg")
nim.show()

#旋转45度
nim2 = nim.rotate( 45, Image.BILINEAR )
#nim2.save( "Blue hills rotated.jpg" )
nim2.show()

#滤镜
nim3 = im
for i in range(2): nim3 = nim3.filter( ImageFilter.BLUR )
nim3.show()

#加logo

text = "Hello Logo!"

img = im
FONT = "c:/windows/fonts/verdana.ttf"
watermark = Image.new("RGBA", (im.size[0], im.size[1]))
draw = ImageDraw.ImageDraw(watermark, "RGBA")
size = 0
while True:
size += 1
nextfont = ImageFont.truetype(FONT, size)
nexttextwidth, nexttextheight = nextfont.getsize(text)
if nexttextwidth+nexttextheight/3 > watermark.size[0]:
break
font = nextfont
textwidth, textheight = nexttextwidth, nexttextheight

draw.setfont(font)
draw.ink = 255 + 255*255 + 255*255*255
draw.text(((watermark.size[0]-textwidth)/2,(watermark.size[1]-textheight)/2), text)
watermark = watermark.rotate(degrees(atan(float(img.size[1])/img.size[0])),Image.BICUBIC)
mask = watermark.convert("L").point(lambda x: min(x, 55))
watermark.putalpha(mask)
img.paste(watermark, None, watermark)
img.show()

等等等等...









zhougaomin_007
2007-11-29


简单使用wxpython的一个例子:

import wx

class MyFrame(wx.Frame):

def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title,
pos=(150, 150), size=(350, 200))



# 使用面板放置其他控件
panel = wx.Panel(self)

# 加了一个标签和按钮
text = wx.StaticText(panel, -1, "Hello World!")
text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
text.SetSize(text.GetBestSize())

btn = wx.Button(panel, -1, "Close")

# 绑定按钮事件
self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, btn)

#设置布局用的sizer
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(text, 0, wx.ALL, 10)
sizer.Add(btn, 0, wx.ALL, 10)

panel.SetSizer(sizer)
panel.Layout()

def OnTimeToClose(self, evt):
print "See ya later!"
self.Close()


class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, "Simple wxPython App")
self.SetTopWindow(frame)

frame.Show(True)
return True

app = MyApp(redirect=True)
app.MainLoop()

No comments: