Python模块

Posted 少年_不识愁滋味

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(badmin, wull.encode(encoding=utf-8))
print(h.digest())
print(h.hexdigest())

 

  re模块

 

 

常用正则表达式符号
        .     默认匹配除
之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
        ^     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","
abc
eee",flags=re.MULTILINE)
        $     匹配字符结尾,或e.search("foo$","bfoo
sdfsf",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") 是匹配不到的
            匹配字符结尾,同$
        d    匹配数字0-9
        D    匹配非数字
        w    匹配[A-Za-z0-9]
        W    匹配非[A-Za-z0-9]
        s     匹配空白字符、	、
、
 , re.search("s+","ab	c1
3").group() 结果 	

        (?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"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。




 

 
 
 

以上是关于Python模块的主要内容,如果未能解决你的问题,请参考以下文章

Python导入模块问题

python aes模块怎么导入

python基础五——模块

python库、包、模块概念辨析

Python模块安装

Python必学的模块都有哪些?