先上网址 https://github.com/Show-Me-the-Code/show-me-the-code
初学python拿来练手,记住一些常用的库和函数
第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果
1 # -*- coding:utf-8 -*- 2 import sys 3 import glob,os 4 from PIL import Image,ImageDraw,ImageFont 5 type = sys.getfilesystemencoding() 6 7 font = ImageFont.truetype("msyhbd.ttc",30) 8 for infile in glob.glob("*.jpg"): 9 file,ext = os.path.splitext(infile) 10 im = Image.open(infile) 11 w,h = im.size 12 x=w*0.8 13 y=h*0.1 14 drawSurface = ImageDraw.Draw(im) 15 drawSurface.text((x,y), "4", fill=(255,0,0), font=font) 16 im.show()
这个题带来了图像处理的库:PIL
Image和ImageDraw,ImageFont是配套的,Draw可以作画,font可以添加一些东东比如字体
可能比较麻烦的是字体的名字怎么找……打开字体文件夹,随便选中一款字体
右键,选择属性查看名称。如果右键没有属性,说明这个字体里还分了类。。比如我的微软雅黑里面还有细体粗体什么的。。打开再属性就好
第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
激活码,就是平时我们看到的那种很奇葩的乱七八糟的码,数字夹杂了字母
而激活码要保证独一而二,又要考虑存储于数据库,那么必然要和id对应上。
# coding:utf-8 import random import string def create_code(id,length=10): id_ = hex(id) id_ = id_[2:]+'L' length = length-len(id_) chars=string.ascii_letters+string.digits; code=id_+ ''.join([random.choice(chars) for i in range(length)]) return code def get_Id(code): id_ = code.split('L')[0] id = int(id_,16) return str(id) if __name__ == "__main__": for i in range(0,200): code = create_code(i) id = get_Id(code) print code,id #本篇重点是string中的char列表,还有join,random.choice(chars)用法
根据输出可以看到I与id是相同的,把i当作id生成code,把code转成id说明不变。成功~
chars列表很有意思~原来还能这么玩
第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。
第 0003 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。
这两题涉及到数据库~~博主并不会数据库~~等我学了再写这两题咯
第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数。
# -*-coding:utf-8 -*— filename = "image.py" key = "import" file = open(filename) text = file.read() beg = 0 num = 0 while text.find(key) != -1: num = num + 1 text = text.split(key,1)[1] print num file.close()
filename和key都是可以自己改的~~~~
这里需要注意的是find()函数。find()如果找得到,就会返回index,如果找不到,就会返回-1.所以千万不可以直接写 if find().无论如何都有返回值……所以一定要写!=-1才能做出正确判断
第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。
# -*- coding:utf-8 -*- import glob,os from PIL import Image size = 200,200 for file in glob.glob('*.jpg'): filename,ext = os.path.splitext(file) im = Image.open(file) w,h = im.size im.thumbnail(size) im.save(filename + 'thumbnail.jpg','JPEG')
os.path.splitext()函数会返回两个部分,前一个是文件名(可能含路径),后一个是类型名,glob.glob("")会查找当前目录中符合的文件。如果想获取当前的目录,可以用os.getcwd()。python中类似的方法实在太多了
第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。
最重要的词,我就把它当出现最多的词咯
# coding:utf-8 import os import sys import re from collections import Counter type = sys.getfilesystemencoding() def getCounter(file): f = open(file) r = re.findall(r'[A-Za-z]+',f.read()) return Counter(r) if __name__ == "__main__": total_counter = Counter() for infile in os.listdir(os.getcwd()): filename,ext = os.path.splitext(infile) if ext == '.py': # total_counter += getCounter(infile) print filename print getCounter(infile).most_common(2) # print total_counter.most_common()[0][0]
这次用到的是神奇的counter!counter类会对内部的数据进行自动统计计数,http://www.pythoner.com/205.html 这个网址有详细的讲解
第 0007 题:有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。
#coding:utf-8 import os import re from collections import Counter annotation = r'^\#.' space = r'^\s+$' if __name__ == "__main__": for i in os.listdir(os.getcwd()): code,blank,note = 0,0,0 filename,ext = os.path.splitext(i) if ext == '.py': with open(i) as f: line = f.readline() while line: if re.match(space,line): blank += 1 elif re.match(annotation,line): note += 1 else: code += 1 line = f.readline() print filename print "code:%d, blank:%d, note:%d"%(code,blank,note)
同样还是在当前目录下运行……定义了注释和空格符的正则,由于不会写代码的正则干脆用else来表示了,与c不同的是else if写成elif……
re.match()就是捕获咯,第一个参数是正则式,第二个参数就是看你检验的字符串啦
第 0008 题:一个HTML文件,找出里面的正文。
#coding:utf-8 import glob,os import requests from bs4 import BeautifulSoup import sys ty = sys.getfilesystemencoding() url = "https://github.com/Show-Me-the-Code/python/blob/master/Forec/0008/0008.py" html = requests.get(url) soup = BeautifulSoup(html.text,"html.parser") print soup.body.text.encode('GBK','ignore').decode('GBK')
鼎鼎大名的bs4!!!!
曾经初学爬虫………………用urllib爬下来然后partition...index....虽然也能做出效果然而实在蛋疼
beautifulsoup会把html代码结构化。soup.body.text指的就是body的全部字符咯,当然也可以尝试输出soup.body.div……不过这样输出的是不含子结构的div,否则是检查不到的~~~那么要怎么才能明确输出某个藏在很深很深结构里标签呢?下面就是这个啦
第 0009 题:一个HTML文件,找出里面的链接。换成<a>标签去找。。。就好
第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-)
#coding:utf-8 import requests import urllib2 from bs4 import BeautifulSoup import lxml.html url = "http://tieba.baidu.com/p/2166231880" html = requests.get(url) soup = BeautifulSoup(html.text,"html.parser") lis = soup.find_all('img') count = 1 for img in lis: src = img.attrs['src'] start = src.rfind('/')+1 end = src.rfind('?') if src.rfind('?') != -1 else len(src) name = src[start:end] #print name filepath = 'e:/image/'+str(count)+name with open(filepath,'wb') as f: # image_data = urllib2.urlopen(src).read() #bs4这里好像下不了 image_data = requests.get(src).content #bs4的用法 f.write(image_data) count += 1
注意find_all函数。。。。不管这个img标签藏得多么深。。这么写就会通通把他们找出来啦