python模块整理(更新)


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.randint110 产生1至10的一个随机整数
random.random() 生成一个0到1之间的随机浮点数包括0但不包括1
random.uniform1,10 生成ab之间的随机浮点数
random.choice可迭代对象从序列中随机选取一个元素
random.randrangestart,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 模块

urllibpython3 内置的 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)

同样可以添加参数


更多爬虫相关请点击这里了解

» 更新中..

Buy me a 肥仔水!