1.递归 查找当前文件夹下的所有文件(包括子文件夹),名称包含 s 的文件
方法一:
import os
def search(s):
mydict={}
isDirOrFile(os.path.abspath('.'),mydict)
for k,v in mydict.items():
if k.__contains__(s):
print v
def isDirOrFile(path,kw):
if os.path.isdir(path):
for x in os.listdir(path):
result = os.path.join(path, x)
isDirOrFile(result, kw)
elif os.path.isfile(path):
kw.setdefault(path, os.path.abspath(path))
if __name__ == '__main__':
search('File')
方法二:
import os
def search(s, path):
for x in os.listdir(path):
result = os.path.join(path, x)
if os.path.isdir(result):
search(s, result)
else:
if s in x:
print result
if __name__ == '__main__':
start_path = os.path.abspath('.')
search('File', start_path)
2.分布式进程
暂时不太懂,感觉跟java的消息队列很像
这两个代码是:
taskManager 先往队列中放数据,
然后 taskWorker 得到数据,计算,将结果发送到另一个队列
taskManager 就得到了最后的计算结果
先执行这个:
taskManager.py
import random,time,Queue
from multiprocessing.managers import BaseManager
# 发送任务和接受任务的队列
task_queue=Queue.Queue()
result_queue=Queue.Queue()
# 解决windows系统__main__.<lambda> not found问题
def return_task_queue():
return task_queue
def return_result_queue():
return result_queue
class QueueManager(BaseManager):
pass
if __name__ == '__main__':
# 把两个queue 注册到网络上,callback参数关联queue对象
QueueManager.register('get_task_queue',callable=return_task_queue)
QueueManager.register('get_result_queue',callable=return_result_queue)
# 绑定端口,设置验证码
manager=QueueManager(address=('127.0.0.1',5000),authkey='abc')
manager.start()
task=manager.get_task_queue()
result=manager.get_result_queue()
for i in range(10):
n=random.randint(0,10000)
print 'Put task %s ' % n
task.put(n)
print 'Try get results ...'
for i in range(10):
r=result.get(timeout=10)
print 'Result : %s ' % r
manager.shutdown()
再执行这个:
taskWorker.py
import time, sys, Queue
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
# 只需要从网络上获取queue,所以注册时只需要提供名字
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')
server_addr='127.0.0.1'
print 'Connect to %s ' % server_addr
m=QueueManager(address=(server_addr,5000),authkey='abc')
m.connect()
task=m.get_task_queue()
result=m.get_result_queue()
for i in range(10):
try:
n=task.get(timeout=1)
print 'Run task %s * %s ...' % (n,n)
r='%s * %s = %s' % (n,n,n*n)
time.sleep(1)
result.put(r)
except Queue.Empty:
print 'Task queue is empty.'
print 'Worker exit.'
python生成一个验证码图片
转自:https://www.liaoxuefeng.com/wiki/897692888725344/966759628285152
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random
# 随机字母
def randomChar():
code=chr(random.randint(65, 90))
print code
return code
# 随机颜色
def randomColor():
return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
# 随机颜色2
def randomColor2():
return (random.randint(32,127),random.randint(32,127),random.randint(32,127))
# 240*60
width=60*4
height=60
image=Image.new('RGB',(width,height),(255,255,255))
# 创建font对象
font=ImageFont.truetype('C:\Windows\Fonts\Arial.ttf',36)
# 创建draw对象
draw=ImageDraw.Draw(image)
# 填充每个像素
for x in range(width):
for y in range(height):
draw.point((x,y),fill=randomColor())
# 输出文字
for t in range(4):
draw.text((60*t+10,10),randomChar(),font=font,fill=randomColor2())
# 模糊
image=image.filter(ImageFilter.BLUR)
image.save('code.jpg','jpeg')
python解析html
解析html,得到想要的数据
from HTMLParser import HTMLParser
import urllib
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self._count=0
self._events=dict()
self._flag=None
# 开始标签
def handle_starttag(self,tag,attrs):
if tag=='h3' and attrs.__contains__(('class','event-title')):
self._flag='even-title'
self._count+=1
self._events[self._count]=dict()
if tag=='time':
self._flag='time'
if tag=='span' and attrs.__contains__(('class','event-location')):
self._flag='event-location'
# 标签中的元素
def handle_data(self,data):
if self._flag=='even-title':
self._events[self._count]['even-title']=data
if self._flag=='time':
self._events[self._count]['time']=data
if self._flag=='event-location':
self._events[self._count]['event-location']=data
self._flag=None
def get_events(self):
return self._events
try:
page=urllib.urlopen('https://www.python.org/events/python-events/')
html=page.read()
except IOError,e:
print e
else:
parser=MyHTMLParser()
parser.feed(html)
events=parser.get_events()
print events
finally:
if page:
page.close()
python解析xml
import urllib #用来抓去网站信息的模块
from xml.parsers.expat import ParserCreate #解析器
import re #正则表达式
try:
#创建链接实例,获取百度天气API
page = urllib.urlopen('http://api.map.baidu.com/telematics/v2/weather?location=%E5%8C%97%E4%BA%AC&ak=B8aced94da0b345579f481a1294c9094')
#读取实例内容,赋值给XML
XML = page.read()
finally:
page.close()
a = re.compile(r'^\s+$') #空格,正则表达式
class BaiduWeatherSaxHandler(object):
def __init__(self):
self.L = [] #创建一个list装XML中的关键数据
self.R = False
self.d = ['currentCity','date','weather','wind','temperature']
def start_element(self,name,attrs):
# print ('sax:start_element:%s,attrs:%s' % (name,str(attrs)))
if name in self.d:
self.R = True
def char_data(self, text):
if a.match(text): #去掉空格的(没内容的)
pass
elif self.R:
self.L.append(text)
self.R = False
# else:
# print ('sax:char_data: %s' % text)
def end_element(self, name):
# print ('sax:end_element: %s' % name)
if name == 'results':
for x in self.L:
print x
raise SystemExit # 关闭程序
handler =BaiduWeatherSaxHandler() #设置解析方法
parser =ParserCreate() #创建解析器
# 设置解析器参数
parser.returns_unicode = True #返回unicode编码
parser.StartElementHandler = handler.start_element
parser.EndElementHandler = handler.end_element
parser.CharacterDataHandler = handler.char_data
parser.Parse(XML) #解析文本
python中MD5的demo
import sys
import hashlib
class user(object):
# 类比数据库
db = dict()
# 根据用户的登录名和口令,生成更安全的口令
def register(self,username,password):
if username in self.db:
print 'This username %s is already exist!' % username
# 终止程序,跟java类似
sys.exit(0)
# 用户名 没有被注册 pasword+username+盐 来生成复杂的密码
realPassword=password+username+'The-Salt'
md5=hashlib.md5()
md5.update(realPassword)
resultPassword=md5.hexdigest()
self.db.setdefault(username,resultPassword)
print 'Register Success,%s' % username
# 验证用户登录的函数
def login(self,username, password):
for k, v in self.db.items():
if username == k:
md5 = hashlib.md5()
md5.update(password+username+'The-Salt')
pw = md5.hexdigest()
if pw == v:
return True
return False
if __name__ == '__main__':
u=user()
u.register('Caren','123456')
flag=u.login('Caren','123456')
if flag:
print '登录成功!'
else:
print '用户名或密码不正确!'
print u.db