python模块整理(更新)
模块,即实现了某个功能的代码集合。
一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),多个 .py 文件
组成的代码集合就称为 模块
python中模块分为三种:
自定义模块
第三方模块
内置模块
模块的导入
导入模块其实就是告诉Python解释器去解释导入的那个py文件
-
导入一个py文件,解释器解释该py文件
-
导入一个包,解释器解释该包下的 __init__.py 文件
模块导入时的路径:sys.path
如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径')
添加
常用的模块总结
sys模块
sys模块是 与python解释器交互
的一个模块
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdin 输入相关
sys.stdout 输出相关
sys.stderror 错误相关
os模块
提供系统级别的操作
的模块
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dir1/dir2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","new") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 用于分割文件路径的字符串
os.name 字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
hashlib模块
用于加密相关的操作
,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
以md5为例:
hash = hashlib.md5()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
print(hash.digest())
加盐(要对加密算法中添加自定义key再来做加密,防止撞库反解)
hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
hash.update(bytes('admin',encoding="utf-8"))
print(hash.hexdigest())
random模块
提供 生成随机数相关
操作
random.randint(1,10) 产生1至10的一个随机整数
random.random() 生成一个0到1之间的随机浮点数,包括0但不包括1
random.uniform(1,10) 生成a、b之间的随机浮点数
random.choice(可迭代对象)从序列中随机选取一个元素
random.randrange(start,end,step)生成一个从start到stop(不包括stop),间隔为step的一个随机整数
random.shuffle(可迭代对象) 序列的元素顺序打乱,改变原有队列,没有返回值
random.sample(可迭代对象,k)从序列中,随机获取k个元素,生成一个新序列
re模块
python中re模块提供了正则表达式相关操作
字符:
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
次数:
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
方法:
-
match(pattern, string, flags=0)
从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
-
search(pattern, string, flags=0)
浏览整个字符串去匹配第一个,未匹配成功返回None
-
findall(pattern, string, flags=0)
获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中有多个组,则以列表形式返回,且每一个匹配均是元祖;
-
sub(pattern, repl, string, count=0, flags=0)
替换匹配成功的指定位置字符串
-
split(pattern, string, maxsplit=0, flags=0)
根据正则匹配分割字符串
分组
# 无名分组
r = re.search("a(\w+)", origin)
print(r.group(0)) # 获取匹配到的所有结果
# 有名分组
r = re.search("a(\w+).*(?P<name>\d)$", origin)
print(r.group('name')) # 获取匹配到的所有结果
补充,flags:
falgs : 匹配模式
X VERBOSE Ignore whitespace and comments for nicer looking RE's.
I IGNORECASE Perform case-insensitive matching.
M MULTILINE "^" matches the beginning of lines (after a newline)
as well as the string.
"$" matches the end of lines (before a newline) as well
as the end of the string.
S DOTALL "." matches any character at all, including the newline.
A ASCII For string patterns, make \w, \W, \b, \B, \d, \D
match the corresponding ASCII character categories
(rather than the whole Unicode categories, which is the
default).
For bytes patterns, this flag is the only available
behaviour and needn't be specified.
L LOCALE Make \w, \W, \b, \B, dependent on the current locale.
U UNICODE For compatibility only. Ignored for string patterns (it
is the default), and forbidden for bytes patterns.
序列化 json,pickle
Python中用于序列化的两个模块
- json: 用于【各种语言通用的json字符串】和 【python基本数据类型】 间进行转换
- pickle: 用于【python特有的类型】 和 【python基本数据类型】间进行转换
模块提供了四个功能:dumps、dump、loads、load
pickle
import pickle
d = dict(a=1, b=2)
# pickle.dumps 将数据转换成只有python语言可以识别的字符串
pickle_data = pickle.dumps(d)
print(type(pickle_data),pickle_data)
import os
current_dir = os.path.dirname(os.path.abspath(__file__))
# pickle.dump 将数据转换成只有python语言可以识别的字符串,并写入文件
with open(os.path.join(current_dir,'pickle_dump_test.pk'),'wb') as f:
pickle.dump(d,f)
#load 和 loads 同上
json
import json
d = dict(a=1, b=2)
# json.dumps 将数据转换成各种语言通用的可以识别的字符串
json_data = json.dumps(d)
print(type(json_data),json_data)
import os
current_dir = os.path.dirname(os.path.abspath(__file__))
# json.dump 将数据转换成各种语言通用可以识别的字符串,并写入文件
with open(os.path.join(current_dir,'json_dump_test.json'),'w') as f:
json.dump(d,f)
xml 模块 与 lxml模块
XML是实现不同语言或程序之间进行数据交换的协议,,跟json差不多,html就是xml的一种形式
python 标准库中自带了 xml 模块
,但是性能不够好
第三方库 lxml
是用 Cython 实现的,而且增加了很多实用的功能, 是爬虫处理网页数据的一件利器
- xml解析文档
from xml.etree import ElementTree as ET
tree = ET.parse("sitemap.xml")
url = tree.find("url")
for rank in tree.iter('loc'):
rank.text = "http://www.adminba.com"
tree.write("sitemap.xml")
- lxml解析文档
from lxml import etree
xml = etree.HTML('<h1><span>haha</span></h1>')
s = xml.xpath('//span/text()')
print(s)
w3lib 模块
w3lib
的代码 最初是Scrapy框架的一部分
,但之后被剥离出Scrapy,目的是使其更加可重用,并提供一个有用的Web功能库,而不依赖于Scrapy。
可以通过它来除去html中的标签
doc = '<div><p><b>This is a link:</b> <a href="http://www.example.com">example</a></p></div>'
from w3lib.html import remove_tags
ret = remove_tags(doc)
# 不指定参数,默认去除所有的tag标签 # 结果 :This is a link: example
# 常用
ret1 = remove_tags(doc,keep=('a',))
# 指定保留的tag, 结果 : This is a link: < a href="http://www.example.com">example</a>
ret2 = remove_tags(doc,which_ones=('a','div','p'))
# 指定去除的tag, 结果 : <b>This is a link:</b> example
urllib 和 requests 模块
urllib
是 python3 内置的 http 请求库
-
它请求后得到的响应是字节流 bytes
-
py2 urllib2.urlopen 等同于 py3 urllib.request.urlopen
request
是更强大的 http 请求库
- 得到的是 string 字符串 区别于 urllib
- 基于python 基于urllib3 采用 Apache2 Licensed 开源协议 的 http 请求库
urllib 的使用接口很繁琐,加代理 加cookie的时候 需要各种handler,而requests是封装的更完善的http请求库
urllib的使用
- 请求
urllib.request.urlopen(url,data=None,timeout=1)
get
response=urllib.request.urlopen("http://www.baidu.com")
post
response=urllib.request.urlopen("http://httpbin.org/post",data=data)
- 更常用的是urllib.parse中的url编码
urllib.parse.urlencode(dic) 编辑字典格式
urllib.request.quote(string) 编辑字符串格式
urllib.parse.urljoin(url1,url2) 组合url
requests的基本使用
- (1)GET 请求:
普通get请求:
>>> import requests
>>> response= requests.get("http://httpbin.org/get")
>>> response.text
带参数的get请求:(params 接收 一个字典)
>>> params={"name":"grammy","age":21}
>>> response=requests.get("http://httpbin.org/get",params=params)
>>> response.text
- (2)POST 请求
有请求体,formdata
data={}
headers={}
response=requests.post(url,data=data,headers=headers)
同样可以添加参数
更多爬虫相关请点击这里了解