python 模块详解

python 模块详解

模块内容区域

  1. 模块介绍
  2. time &datetime模块
  3. random
  4. os
  5. sys
  6. shutil
  7. json & picle
  8. shelve
  9. xml处理
  10. yaml处理
  11. configparser
  12. hashlib
  13. subprocess
  14. logging模块
  15. re正则表达式

模块介绍

1,定义

模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),
            本质就是  .py 结尾的python文件(文件名 text.py 对应的模块名 text)
包:用来从逻辑上组织模块的,本质就一个目录(必须带有一个 __init__.py 文件)

2,导入方法

导入模块
    import module_name
    import module_name1,module_name2 (导入多个模块)
        调用方式:
            module_name1.hello()
    from module_name import hello
    from module_name import * (导入这个文件中所有的东西,等于代码写在引入的文件里)
        调用方式:
            hello()  (文件中无重名函数)
            module_name import hello as hello2(有重名函数情况下,可为模块中的函数更改名称)
    (两种方法的函数调用方式不同)

导入包
        import package_test

3,import 本质(路径搜索和搜索路径)

导入模块的本质就是把 python 文件解释一遍
    import module_name -->module_name.py -->module_name.py的路径 -->sys.path
        import module_name
            原模块中的所有代码(解释过) 赋值给一个变量,module_name = all_code
            使用方式:module_name.hello()
        from module_name import hello
            等同于模块的代码全部写在引入的文件里,对于模块中函数和变量,直接使用就好
            使用方式:hello()

导入包的本质就是 执行包下的 __init__.py 文件
    包里面有一个 __init__.py 文件

        from day5 import package_test
        package_test.test1.test()

4,导入优化

导入优化,多次调用一个函数时,使其不用重复 搜索模块
直接导入 函数方法
    import module_test
    from module_test import test

模块分类

1,标准库(python内置模块)

1 , time 与 datetime

time 时间戳
	Timestamp
	time.time()
格式化时间字符串 Format string

元组 struct_time()(共九个元素)

时间戳 Timestamp -->  struct_time元组形式
	gmtime: 结果为UTC时区
	localtime: 结果为UTC + 8时区
元组形式 --> 时间戳
	mktime
元组 < --> 格式化字符串
	strftime("格式", struct_time) - --> "格式化的字符串"
	strptime("格式化的字符串", "格式") --> struct_time
	
	time.strftime("%Y-%m-%d %H:%M:%S", x)
	time.strptime('2016-08-20 14:31:52', % Y - % m - % d % H: % M: % S)

2,random 模块

random.random()
random.randint(1,3)
range(1,3)
random.randrange(1,3)
random.choice("hello"/['a','b','c'])
random.sample('hello',2)
random.uniform(1,3)

l=[1,2,3,4,5,6]
random.shuffle(l) #打乱原顺序
# random 模块
# 随机生成四位的验证码并进行输入验证:数字,大小写字母
import random

while True:
    checkcode=''
    for i in range(4):
        current = random.randint(1,9)
        if current%2==0 and current>=5:
            tmp = chr(random.randint(65,90))
        elif current%2==0 and current<5:
            tmp = chr(random.randint(97,122))
        else :
            tmp = random.randint(1,9)
        checkcode += str(tmp)

    print(checkcode)

    s = input("请输入验证码:")
    if s==checkcode:
        print("输入正确")
        break
    else:
        print("输入错误,请重新输入")

3,os 模块 – 提供对操作系统进行调用的接口

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作记录,相当于 shell 下cd
os.curdir() 返回当前目录:('.')
os.pardir() 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依次向上
os.mkdir('dirname') 生成单级目录,相当于 shell 中 mkdir dirname
os.rmdir('diename') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell 中 rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win 下为 "\\",linux 下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",linux 下为"\n"
os.pathsep 输出字符串指示当前使用平台。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,否则返回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 所指向的文件或者目录的最后修改时间

4, sys 模块

sys.argv  命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时 exit(0)
sys.version 获取python解释器程序的版本信息
sys.maxint 最大的 Int 值
sys.path   返回模块的搜索路径,初始化时使用 PYTHONPATH环境变量的值
sys.platform  返回操作系统平台名称
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]

5, shutil 模块–高级的 文件,文件夹,压缩包 处理模块

shutil.copyfileobj(fsrc,fdst[,length]) 将文件内容拷贝到另一个文件中,可以部分内容
shutil.copyfile(src,dst) 拷贝文件
shutil.copymode(src,dst) 仅拷贝权限,内容,组,用户均不变
shutil.copystat(src,dst) 拷贝状态的信息,包括mode bits,atime,mtime,flags
shutil.copy(src,dst) 拷贝文件和权限
shutil.copy2(src,dst)   拷贝文件和状态信息
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件
shutil.rmtree(path[,ignore_errors[,onerror]]) 递归的去删除文件
shutil.move(src,dst) 递归的去移动文件
shutil.make_archive(base_name,format,...) 创建压缩包并返回文件路径,例如:zip,tar
# shutil 模块的使用

import shutil

# f1 = open("本节笔记",encoding="utf-8")
#
# f2 = open("笔记2","w",encoding="utf-8")
# shutil.copyfileobj(f1,f2)

#shutil.copyfile("笔记2","笔记3")
#shutil.copystat("本节笔记","笔记3")

#shutil.copytree("test4","new_test4")
#shutil.rmtree("new_test4")

#shutil.make_archive("shutil_archive_test", "zip","E:\PycharmProjects\pyday1\day5")

import zipfile

z = zipfile.ZipFile("day5.zip","w")
z.write("p_test.py")
print("-----")
z.write("笔记2")

z.close()

6, json & pickle 模块

json 用于字符串和python数据类型间进行转换
四个功能:dumps,dump,loads,load
pickle 用于python特有的类型和python数据类型间进行转换
四个功能:dumps,dump,loads,loads
#import json
import pickle

def sayhi(name):
    print("hello,",name)
info = {
    'name':'alex',
    'age':22,
    'func':sayhi
}
f = open("test.text","wb")
#print(json.dumps(info))
print( )
f.write( pickle.dumps( info) )

f.close()

# import json
# import pickle
#
# def sayhi(name):
#     print("hello ",name)
#
# info ={
#     'name':'baobaohui',
#     'age':22,
#     'func':sayhi
# }
#
# f = open("test.txt","w")
# # f.write(str(info))
#
# # print(json.dumps(info))
# f.write(json.dumps(info))
#
# f.close()

7, shelve 模块

shelve模块是一个简单的 key,value 将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
import shelve
import datetime
d = shelve.open('shelve_test')  # 打开一个文件

# 读取内容
print(d.get("name"))
print(d.get("info"))
print(d.get("date"))

# 持久化
# info =  {'age':22,"job":'it'}
#
# name = ["baobaohui", "rain", "test"]
# d["name"] = name  # 持久化列表
# d["info"] = info  # 持久dict
# d['date'] = datetime.datetime.now()
# d.close()

8, xml 处理模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,
不过在json还没诞生的黑暗年代,大家只能选择用xml,
至今很多传统公司如金融行业的很多系统的接口还主要是xml。

xml 修改

#xml 修改
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()

# 修改
# for node in root.iter('year'):
#     new_year = int(node.text)+1
#     node.text = str(new_year)
#     node.set("updated_by","baobaohui")
#
# tree.write("xmltest.xml")

# 删除node

for country in root.findall('country'):
    rank = int(country.find('rank').text)
    if rank>50:
        root.remove(country)
tree.write('output.xml')

xml 处理

import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag)


# 遍历xml文档
# for child in root:
#     print(child.tag, child.attrib)
#     for i in child:
#         print(i.tag, i.text,i.attrib)

# 只遍历year 节点
for node in root.iter('year'):
    print(node.tag, node.text)

xml 创建

import xml.etree.ElementTree as ET

new_xml = ET.Element("personinfolist")
personinfo = ET.SubElement(new_xml, "personinfo", attrib={"enrolled": "yes"})
name = ET.SubElement(personinfo, "name")
name.text = "Alex Li"
age = ET.SubElement(personinfo, "age", attrib={"checked": "no"})
sex = ET.SubElement(personinfo, "sex")
age.text = '56'
personinfo2 = ET.SubElement(new_xml, "personinfo", attrib={"enrolled": "no"})
name = ET.SubElement(personinfo2, "name")
name.text = "Oldboy Ran"
age = ET.SubElement(personinfo2, "age")
age.text = '19'

et = ET.ElementTree(new_xml)  # 生成文档对象
et.write("test.xml", encoding="utf-8", xml_declaration=True)

ET.dump(new_xml)  # 打印生成的格式

9, PyYAML 模块

Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块

10, ConfigParser 模块

用于生成和修改常见配置文档。
当前模块的名称在 python 3.x 版本中变更为 configparser。

11, hashlib 模块

用于加密相关的操作,3.x里代替了md5模块和sha模块,
主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import hashlib
#
# m = hashlib.md5()
# m.update(b"Hello")
# print(m.hexdigest())
# m.update(b"It's me")
# print(m.hexdigest())
# m.update(b"It's been a long time since we spoken...")
#
m2 = hashlib.md5()
m2.update("HelloIt's me天王盖地虎".encode(encoding="utf-8"))
print(m2.hexdigest())
#
# s2  = hashlib.sha1()
# s2.update(b"HelloIt's me")
# print(s2.hexdigest())

import hmac

h = hmac.new(b"12345","you are 250你是".encode(encoding="utf-8"))
print(h.digest())
print(h.hexdigest())

12, Subprocess 模块

13, logging 模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,
python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,
logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,

14, re 模块–正则表达式

常用正则表达式
  '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
  '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
  '$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
  '*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']
  '+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
  '?'     匹配前一个字符1次或0次
  '{m}'   匹配前一个字符m次
  '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
  '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
  '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c

   '\A'    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
   '\Z'    匹配字符结尾,同$
   '\d'    匹配数字0-9
   '\D'    匹配非数字
   '\w'    匹配[A-Za-z0-9]
   '\W'    匹配非[A-Za-z0-9]
    's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'

    '(?P<name>...)' 分组匹配 
    re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})",
    	"371481199306143242").groupdict("city") 
    结果{'province': '3714', 'city': '81', 'birthday': '1993'}

常用匹配语法
    re.match 从头开始匹配
    re.search 匹配包含
    re.findall 把所有匹配到的字符放到以列表中的元素返回
    re.splitall 以匹配到的字符当做列表分隔符
    re.sub      匹配字符并替换

2,开源模块
3,自定义模块

泡泡:

这些模块算是先混个脸熟,等用到的时候继续学习。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值