python---基础回顾(爬虫)
2016-06-10 14:08
465 查看
python学习回顾
**python 是脚本语言,面向对象,解释型语言有两个版本 python2 和 python 3 (有所不同) (官网有2-to-3 工具,对python2和3 代码进行转换)
本文重点: 数据处理, GUI学习**
**python(x,y) 软件包
包含许多常用的包**
标准数据类型
整型、浮点型、复数型、字符串、元组、字典、列表、布尔型
函数和模块、包
函数
函数:abs(x) type(x) round(x) 四舍五入函数
内建函数:
cmp() dir() raw_input()输入的是字符串….
input()输入的是数
dir(builtins)
查看内建变量
helf()
查看帮助信息
模块
非内建函数 需要导入
import math
math.pi
就可以使用 math.py 中的函数
包
有层次的文件目录结构
模块和子包组成的应用程序执行环境
import test.first.reptile
test.first.reptile.XXX()
from test.first.reptile import XXX
XXX()
包> 模块或库>函数或方法
循环
range 和 xrange
range(start, end, step = 1)
print ragne(0,20,2)
生成一个列表 值的个数: (end - start) / step
xrange() 用多少生成多少
内存处理效率高
循环中使用较多
for 变量 in 可迭代对象
可迭代对象: 字符串、列表、元组、字典、文件
for用于遍历数据集内部成员,列表解析,生成器表达
遍历数据集内部成员
str = "Hello world !" for x in str: print x for y in range(2,20,1): print y,
注意:后者y, 打印后表示在同一行。前者x打印会有换行。
列表解析的语法[i+1 for i in range(0,10) if i % 2 == 0]
自定义函数
自定义函数创建
def addMe2Me(x):
‘apply operation + to argument’
return (x + x)
第二行代码: 函数注释 DocString
查看方式: print 函数名.doc
输出1–100内的素数
from math import sqrt def Isprime(x): if x == 1: return False k = int(sqrt(x)) for j in range(2, k+1): if x % j == 0: return False return True for i in range(2,101): if Isprime(i): print i,
默认参数:
def fun(x, y = False): print x if y : print "No,It is " + y
关键字参数(所有保持统一,主要目的改变参数顺序)
def fun(x=1, y = 2) print x print y
传递函数
def add2(x): return (x+x) def self(f,y): print f(y) self(add2,11) 22
lambda函数
def add2(x): return x + x #功能相同 r = lambda x : x + x print add2(5) print r(5)
优点:匿名函数,没有return。没有定义函数的过程,无需函数名,但使用的时候要有个名字,例如r
递归
斐波那契数列
1
def fib(n): a,b = 0,1 count = 1 while count < n: a,b = b, a+b count += 1 print a
2
def fib(n): if n == 0 or n == 1: return n else: return (fib(n-1) + fib(n-2))
后者内存占用大,执行效率不高
汉诺塔问题解决
递归解决具有优势。
def hanoi(a,b,c,n): if n == 1: print a,'->',c else: hanoi(a,c,b,n-1) print a,'->',c hanoi(b,a,c,n-1) hanoi('a','b','c',4) #注意递归的出口条件一定要有 #考虑问题的时候,将后续递归当做一个整体,不去思考内部是怎样的。例如把(n-1)就当做一个盘子考虑。
变量作用域
python 中在那里定义,作用域就在那
global_str = 'hello' def foo(): local_str = 'world' return global_str + local_str #global_str:全局变量 #local_str:局部变量 函数中定义的 x = 3 def f(): global y x = 6 print a ** 2 y = 1 #global 定义全局变量,函数外可更改 #答案是36 , 内层屏蔽外层
本地数据获取
f = open(r'd:\\11.txt') f2 = open(r'd:\\11.txt','w') #r 读, w 写, a 追加 #rb wb ab 二进制打开
文件相关函数
函数很多,一般形式
f.read()
对象.方法(参数)
文件读写:
#将一个文件t中字符,编号存储到文件s中 t = open(r't.txt','r+') p1 = t.readlines() for i in range(0,len(p1)): p1[i] = str(i + 1) + ' ' + p1[i] t.close() s = open(r's.txt','w') s.writelines(p1) s.close() s = open(r's.txt','r') p2 = s.read() s.close() print p2
f.seek(offset, whence = 0)
whence = 0 表示文件头部 , 1 表示当前位置,2 表示文件尾部
offset偏移的字节
s.writelines(p1) s.seek(0,0) #之前要将指针指向文件开头 s.read() s.close()
获取网络资源
import urllib r = urllib.urlopen(r'http://kan.sogou.com/dongman/') html = r.read() print html
可以获取网页信息,但需要进一步处理,才能得到想要的内容。 需要学习正则表达式
视频参考
正则表达式
处理数据经常用到
基础规则
存在于re模块中,一种小型的高度专业化的编程语言,内嵌在python中,其实是一门独立的语言。
-匹配字符串
-单词语句、地址、目录等等,进行匹配。
-修改分割字符串
-用C编写的匹配引擎上执行
-功能有限
字符匹配
大多数字母字符都和自身匹配
例如: hello 会和‘hello’匹配
元字符
. ^ $ * + ? {} [] \ | ()
#1. [] 用来指定一个字符集,【或集】 其中的任何一个都符合
找到符合的字符串
import re s = r'abc' re.findall(s, "aaa abc ssd") 结果 :['abc'] #这种方式,可以得到需要的内容,进行完全匹配 #### [] 出场 ###
import re
希望得到abc 或者 adc
s = r’a[bd]c’
re.findall(s,”abc acc adc asd cda”)
结果:['abc', 'adc']
取反(除了方括号中的其他的) s = r’a[^bd]c’
结果: [‘acc’, ‘asd’, ‘cda’]
注意:元字符,在[]里面不起作用
还可以,[0123456789] 等价于 [0-9]
[abcdefghijklmnopqrstuvwxyz] 等价于 [a-z] 大写同理,方便简单啊。
r = r”[a-zA-Z0-9]”
大小写字母加数字的匹配
#2. ^ 行首匹配
r = r”^adc” 行首匹配
s = “adc asd sad adc”
[“adc”]
s = “adad asd sad adc”
[]
#3.$ 行尾匹配
r = r'adc$' s = "adf adf adc" >["adc"]
#4. \ 转义字符
r = r'\^abc' r = r'[0-9]' 等价于 r = r'\d'
其他:
\d 等价于 [0-9]
\D … [^0-9]
\s … [\t\n\r\f\v]
\S … [^\t\n\r\f\v]
\w … [a-zA-Z0-9_]
\W … [^a-zA-Z0-9_]
#5. 重复 {}
s = '010-12345678' r = r'^010-/d/d/d/d/d/d/d/d' re.findall(r,s) 结果: ['010-12345678'] 还可以, r = r'^010-/d{8}$' {}里面表示重复次数 * + ? *把前面字符重复0(没有)或多次 +至少出现一次或多次 .任意一个字符 ?可有可无,一次或0次 (最小匹配) 加在重复后面, r =r'ab+' s = 'abbbbbbbbbb' #贪婪模式 结果:['abbbbbbbbbb'] r = r'ab+?' # 非贪婪模式 s = 'abbbbbbbbbbb' 结果:['ab'] r = r"ab*" r = r"ab+" 以上 , r = r'^010-?/d{8}$' 加上? 表示 - 可有可无 {}重复的次数 r = r'a{1,3}' 最少一次,最多三次 {m,n} 最少m,最多n次 **re模块** 提供正则表达式引擎接口,将REstring编译成对象,进行匹配。 以上都是使用直接解释型的方式使用,编译效率更快。 > 编译正则表达式
r = r’\d{3,4}-?\d{8}$’
p_tel = re.compile(r)
p_tel.findall(‘010-12345678’)
不区分大小写: cctv_re = re.compile(r'cctv', re.I) 详细内容函数很多 具体可查看资料 dir(re) help(re) **小爬虫** 例子:
# -- coding: utf-8 --
import urllib
import re
#电影天堂
r = urllib.urlopen(r’http://www.dytt8.net/‘)
html = r.read()
s = r”href=.+.html”
count = 0
result = re.findall(s, html)
for i in result:
count += 1
print “No.” + str(count)+’* ’ + i
#print html
#print result
print count
**转换工厂函数**
list(‘Hello’)
[‘H’,’e’,’l’,’l’,’o’]
“`
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法