Python模块

1.定义
模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),
本质就是.py结尾的Python文件(文件名:test.py,对应的模块名:test)

包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个_init_.py文件)

2.import本质(路径搜索和搜索路径)
  
导入模块的本质就是把Python文件解释一遍

导入包的本质就是执行该报下的_init_.py文件

3.模块的分类
(1)标准库
  (2)开源模块
  (3)自定义模块

4.模块详细
  time & datetime模块
 
clock()  返回处理器时间
altzone  返回与utc时间的时间差,以秒计算
asctime()  返回时间格式
localtime()  返回本地时间 的struct time对象格式
gmtime(time.time()-800000)  返回utc时间的struc时间对象格式

  时间戳 time(获取时间戳) ---------------------->struct_time(tuple)----------------------->格式化的字符串

          gmtime:结果为UTC时区              strftime("格式",struct_time)
          localtime:结果为UTC+8时区     
格式化的字符串--------------------->struct_time(tuple)----------->时间戳
        
strptime("格式化的字符串","格式") mktime

  时间加减
1 print(datetime.date.fromtimestamp(time.time()))  # 时间戳直接转成日期格式 2019-12-29
2 print(datetime.datetime.now())  # 当前时间
3 print(datetime.datetime.now() + datetime.timedelta(3))  # 当前时间+3天
4 print(datetime.datetime.now() + datetime.timedelta(hours=3))  # 当前时间+3小时
5 print(datetime.datetime.now() + datetime.timedelta(minutes=30))  # 当前时间+30分钟
6 print(datetime.datetime.now().replace(hour=2, minute=3))  # 时间替换

  random模块

 

        random.random()  浮点数
        random.uniform(1,3)  浮点数 2.*
        random.randint(1,3)  [1-3]整数
        random.randrange(1,10,2)  [1-10)步长为2
        random.choice('hello') random.choice([1,3,4])
        random.sample('hello',2) 取两位
        random.shuffle([1,2,3,4,5,6]) 洗牌,随机数出序列

 

  生成随机验证码(不完善)

 

 1 import random
 2 
 3 checkcode = ''
 4 
 5 for i in range(4):
 6     # i = 0
 7     current = random.randrange(0, 4)
 8     # 字母
 9     if current == i:
10         tmp = chr(random.randint(65, 90))  # 随机字母是大写的
11         # tmp = chr(random.randint(97, 122))  # 随机字母是小写的
12 
13     # 数字
14     else:
15         tmp = random.randint(0, 9)
16     checkcode += str(tmp)
17 print(checkcode)

 

 

  os模块

 

        getcwd()  获取当前目录
        chdir('dirname')   改变当前路径
        curdir  返回当前目录 '.'
        pardir  获取当前目录的父目录 '..'
        makedirs('dirname1/dirname2') 递归创建目录
        removedirs('dirname1') 如果目录为空则删除,并递归到上级目录,如也为空,还删,类推  清理空文件夹
        mkdir('dirname')    生成单级目录
        rmdir('dirname')    删除单级空目录
        listdir('dirname')  列出指定目录下的所有文件和子目录
        remove()    删除一个文件
        rename('oldname','newname') 重命名文件/目录
        stat('path/filename')  获取文件/目录信息

        path.abspath(path) 返回path规范化的绝对路径
        path.split(path) 将path分割成目录和文件名二元组返回
        path.dirname(path) 返回path目录,其实就是path.split(path)的第一个元素
        path.basename(path) 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值
        path.exists(path) 如果path存在,返回true,不存在返回false
        path.isabs(path) 如果是绝对路径,返回true
        path.isfile(path) 如果path是一个存在的文件,返回true,否则返回false
        path.isdir(path) 如果path是一个存在的目录,返回true
        path.join(path1[,path2[,...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
        path.getatime(path) 返回path所指向额文件或者目录的最后存取时间
        path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

 

  

  sys模块

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

 

  shutil模块

        copyfileobj(fsrc,fdst[,length])  将文件内容拷贝到另一个文件中,可以部分内容
        copyfile(src,dst) 拷贝文件
        copymode(src,dst) 仅拷贝权限。内容、组、用户均不变
        copystat(src,dst) 拷贝状态的信息,包括:mode bits,atimemtime,flags
        copy(src,dst) 拷贝文件和权限
        copy2(src,dst) 拷贝文件和状态信息
        copytree(src,dst,symlinks=False,ignore=None) 递归的去拷贝文件
        例如:copytree(source,destination,ignore=ignore_patterns('*.pyc','tmp*'))
        rmtree(path[,ignore_errors[,onerror]])  递归的去删除文件
        move(src,dst)  递归的去移动文件

        make_archive(base_name,format,...)   创建压缩包并返回文件路径,例如:zip,tar
            base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径
            format:压缩包种类,"zip","tar","bztar","gztar"
            root_dir:要压缩的文件路径(默认当前目录)
            owner:用户,默认当前用户
            group:组,默认当前组
            logger:用于记录日志,通常是logging.Logger对象
shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的
import zipfile

# 压缩
z = zipfile.ZipFile('p.zip', 'w')
z.write('p_test.py')
z.close()

# 解压
z = zipfile.ZipFile('p.zip', 'r')
z.extractall()
z.close()

 

  json & pickle模块   

用于序列化的两个模块
json:用于字符串和Python数据类型间进行转换
pickle:用于Python特有的类型和Python的数据类型间进行转换
json模块提供了四个功能:dumps,dump,loads,load
pickle模块提供了四个功能:dumps,dump,loads,load

  hashlib模块

  用于加密相关的操作,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法,越往后越安全
 1 import hashlib
 2 
 3 m = hashlib.md5()
 4 m.update(b"Hello")
 5 print(m.digest())     # 2进制格式hash
 6 print(m.hexdigest())  # 16进制格式hash
 7 m.update(b"It's me")
 8 print(m.hexdigest())
 9 m.update(b"It's been a long time since we spoken...")
10 print(m.hexdigest())
11 
12 m2 = hashlib.md5()
13 m2.update(b"HelloIt's me")
14 print(m2.hexdigest())

 

 

  hmac模块

 

  它内部对我们创建key和内容再进行处理然后再加密
import hmac

h = hmac.new(b'admin', 'wull'.encode(encoding='utf-8'))
print(h.digest())
print(h.hexdigest())

 

  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      匹配字符并替换

 

反斜杠的困扰
       与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。

       假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。




 

 
 
 
posted @ 2019-12-29 12:17  少年_不识愁滋味  阅读(195)  评论(0编辑  收藏  举报