python学习笔记
python3与python2的区别:
python3的默认编码格式为UTF-8
与python2不同,需要通过#coding:UTF-8来声明
Linux中运行加声明:#!/usr/bin/python
python -c "import pty; pty.spawn('/bin/bash')" : 将终端返回出来
python -m SimpleHTTPServer 端口号;使用文件夹当作服务器使用
字符串格式化:
'%06d' %(1) : 以6位数的方式补齐,位数不够补0
format:格式化字符串
强类型语言,变量可可以通过赋值指向不同类型的对象当把变量b的值赋给变量a的时候,表示变量a和变量b所指向的对象为同一个,更改其中一个的值,另一个的值也会随之改变
input():键盘输入数据(python2使用raw_input()接收字符串)
type():返回数据类型
python基本数据类型为:列表,元组,集合,字典
list:列表
li.append():末尾添加元素
li.insert(位置, value):根据下标添加
li.pop(位置):末尾删除元素,参数可选,参数为下标
li.remove(值):根据值删除元素
li.sort():排序
reverse = False参数可选,默认倒序
li.index(值):判断元素第一次出现的位置
tuple:元组
可以使用切片和+对元组进行操作
元组数据不允许修改
声明只有一个值的元组时需要加逗号分隔 例(a,)
1.与字符串一样,元组的元素不能修改
2.元组可以被切片
3.注意包含0个和1个的特殊语法规则
4.可以使用+操作的拼接
set:集合,存放无序不重复序列
set():定义空的set 集合 空的{}是空字典
add:添加元素
discard:删除元素
pop:随机删除()
clear:清空
集合的运算:
a - b,a中不包含b的元素
a & b,a和b中共同元素
a | b,a和b的所有元素,去重
a ^ b,不包含共同元素的集合
dict:
key->value
字典只判断键是否存在,
可以通过不存在的key指向val的方式添加新的元素
dict转换成list 的时候会自动删除
使用for循环遍历字典默认为key
keys:全部键值
values:全部值
字典是一种映射类型,他的元素是键值对象
字典的值的类型必须为不可变类型
创建空字典使用{}
pop(键值):根据键删除值
itmes():取出字典中的键值对
break:跳出循环
continue:跳出本次循环
range:生成一个序列(包含左边不包含右边,第三个参数为步长,可为负数)
字符串常用函数:
len(''):字符串的长度
''.split(''):字符串分割
''.strip():去除前后的空格
''.upper():转换成大写
''.lower():转化为小写
'-'.join(list):字符串连接列表
''.replace('val1', 'val2'):替换字符
将字符串中的val1,替换成val2
''.count('a'):计数
计算字符串中'a'出现的数量
''.find('val'):从左边开始查找val出现的位置
''.rfind('val'):从右边开始查找val出现的位置
''.title():每个字符的首字母的头单词大写
''.capitalize():第一个字符大写
函数式编程:
将其他函数作为参数传递,并在内部调用
纯函数:不改变任何值,只依赖于参数进行计算
非纯函数:可能改变任何值
匿名函数:
lambda 参数列表:表达式
map(函数名, 序列):
序列中每一个值都执行一次函数,返回一个新的迭代器
filter(函数名, 序列):
过滤掉值序列中为false的值
reduce(函数名,序列):
函数名必须接收两个值,执行累加操作
迭代器:
iter(列表):将列表转化为迭代对象
迭代器与列表的区别
迭代器不是一次将内容加载出来,而是通过每调用一次next()函数,就会加载一次
生成器:使用yield关键字
可以向return一样直接使用变量接收
__next__():使用此方法获取下一个yield的值
模块的使用:
import 文件名
调用模块的时候,不会执行if __name__ = '__main__' 代码块下的内容
python文件下需要__init__.py文件,该文件是空的
sys.argv[0]:表示当前文件名称
os模块:系统操作功能
方法名 介绍
os.name 返回正在使用的平台
os.getcwd 获得正在使用的脚本目录
os.getenv 读取环境变量
os.listdir 显示当前文件夹下所有文件
os.remove 删除文件
os.system 执行系统命令
os.sep 给出当前系统命令分隔符
os.path.isfile 判断文件是否存在(返回false和true)
os.path.isdir 判断文件夹是否存在(返回false和true)
with open() as 别名:(防止文件意外关闭是写不到文件中)
open(文件名, 模式, encoding='')
read() 读
readline() 读取一行
readlines() 读取全部
write(str) 写
writelines(seq) 写如元组或者列表
seek:指针
模式(加b为2进制) 效果
r 读,文件不存在抛出异常
w 写,文件存在就覆盖
a 追加,在文件的末尾添加元素,不存在就创建
r+ 读写,指针放在文件的开头,文件不存在抛出异常
w+ 读写,文件存在就覆盖
a+ 追加,可读写
csv:写到表格中(写多行在open中将newline设置为空串)
csw = csv.writer(open对象)
csw.writerow(list对象)
csw = csv.reader(open对象)
异常处理:
raise 自己引发异常
try:
代码块
except:
出现异常时候执行的代码块
finally:
最后执行的代码
time.sleep(s秒): 延时s秒
爬虫:decode('utf-8')解码
encode('utf-8')编码
批量性爬虫
增量型爬虫
垂直型爬虫
requests:
requests.get(url, headers="")
response.request.headers 获取请求头i
response.headers 获取相应头
re.status_code == requests.codes.ok
判断请求头代码是否与相应代码是否相等
get中的timeout=5属性 如果5秒内网页没有响应,抛出异常
参数:
响应属性:
lxml
/ 从根节点开始
// 从任意节点开始
/text() 获取文本中的值
@ 属性的选取
string(xpath语法):获取xpath中的所有字符