zoukankan      html  css  js  c++  java
  • python笔记:常用模块

    模块,模块就是封装了特殊功能的代码。

    模块分为三种:

      自定义模块

      第三方模块

      内置模块

    1.自定义模块

    自定义模块就是自己定义的模块,如何import自定义模块,如下:

    (1)主程序与模块程序在同一目录下:
    如下面程序结构:
    `-- src
        |-- mod1.py
        `-- test1.py
        若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *;
    (2)主程序所在目录是模块所在目录的父(或祖辈)目录
    如下面程序结构:
    `-- src
        |-- mod1.py
        |-- mod2
        |   `-- mod2.py
        `-- test1.py
        若在程序test1.py中导入模块mod2
    可以使用
    from mod2.mod2 import * 或import mod2.mod2.
    (3)主程序导入上层目录中模块或其他目录(平级)下的模块
    如下面程序结构:
    `-- src
        |-- mod1.py
        |-- mod2
        |   `-- mod2.py
        |-- sub
        |   `-- test2.py
        `-- test1.py
        若在程序test2.py中导入模块mod1和mod2。调用方式如下:
    import os
    import sys
    path = os.path.dirname(os.path.dirname(__file__))     #获取test2.py的根目录sub,然后再获取sub的根目录src
    sys.path.insert(0, path)                              #将src目录添加到环境变量
    import mod1
    import mod2.mod2

    当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

    搜索路径是一个解释器会先进行搜索的所有目录的列表。如果需要导入模块support,需要把命令放在程序的顶端

    • 一个模块只会被导入一次
    • python解释器依次从目录中一级级的去寻找所引入的模块
    • 寻找模块的过程有点像环境变量,事实上也可以通过定义环境变量的方式来确定搜索的路径
    • 搜索路径是python编译或者安装的时候确定的,安装新的库应该也会修改,搜索路径被存储在sys模块中的path变量

    2. 第三方模块

    如何安装第三方模块,有2种安装方式,如下:

    第一种安装方式:

    Python3种自带了pip3,Python2.7种自带了pip,前提是需要将pip3(scripts目录)添加环境变量。

    pip3  install  xxx     安装某个模块

    pip list                    查看已经安装的模块

    pip uninstall           xxx模块已卸载

    第二种安装方式,手动安装:

    先下载安装包,直接百度搜比如说python requests模块
    解压安装包
    在解压的目录下执行 python setup.py install

    3. 内置模块

    random模块

    import random
    print(random.randint(1, 20))             #在1-19之间随机生成一个整数,随机
    print(random.choice('abs123'))           #随机取一个元素,随机可迭代对象:字符串、字典、list、元组
    print(random.sample('abcdfgrtw12', 3))   #随机取几个元素,3是长度,['2', 'a', 'b'],返回结果是list类型
    print(random.uniform(1, 9))              #随机浮点数,随机取1-9之间的浮点数,可指定范围,5.8791750348305625
    print(random.random())                    #随机0-1的浮点数,0.9465901444615425
    random.shuffle([1, 2, 3, 4, 5, 6])       #随机打乱list的值,只能是list

    生成随机8位验证码,要求必须包含大小写字母及数字

     1 #使用交集判断随机生成的长度为8的数据。是否包含大小写字母和数字
     2 def ran_data_set():
     3     all = string.ascii_letters + string.digits     #生成包含大小写+数字
     4     set_u = set(string.ascii_uppercase)            #生成所有的大写字母
     5     set_low = set(string.ascii_lowercase)          #生成所有的小写字母
     6     set_num = set(string.digits)                   #生成0-9的数字
     7     res_set = set()                               #定义一个空set,向set写入随机生成的数据时,保证随机生成的8位元素不重复,导致长度不够8位
     8     while len(res_set) < 8:                       #当数组的长度小于8时,添加元素到set,去除重复的元素
     9         res_set.add(random.choice(all))
    10     #判断生成的随机数据中是否与大写、小写、数字都有交集
    11     if res_set.intersection(set_u) and res_set.intersection(set_low) and res_set.intersection(set_num):  #非0即真非空即真,判断是否包含大小写和数字
    12         res_value = ''.join(res_set)               #每个元素之间使用空相拼接
    13         return res_value
    14     else:
    15         return ran_data_set()                    #如果不包含大写、小写、数字中任意一个,继续调用该函数,生成符合条件的随机数

    os模块

    常用方法如下:getcmd()、mkdir()、os.path.abspath()、system()、popen()、join()、os.pathdirname()等
    import os
    print(os.getcwd())                     #获取当前py文件所在的工作目录:E:python_workspacease-codeday6
    os.chdir('../') #更改当前的工作目录
    print(os.getcwd()) #更改后的目录:E:python_workspacease-code
    print(os.mkdir('test01')) #在当前工作目录创建文件夹
    print(os.mkdir('E:/python_workspace/base-code/test01')) #在其他目录下创建文件夹时,需要写绝对路径
    print(os.makedirs(r'test02 est2')) #创建多层目录,若创建的父目录(test02)不存在,则创建成功 print(os.rmdir('test01')) #删除当前目录下的空文件夹,若文件夹有内容,则删除失败 #print(os.removedirs(r'test02 est2')) #删除多层文件夹,若文件夹下有文件,则删除失败 print(os.remove('ac.py')) #删除文件,若传入文件夹则抛出OSError异常
    print(os.rename('a.py', 'ab.py'))      #重命令,将a.py更改为ab.py
    print(os.listdir('.'))                 #打印当前目录下所有的文件,返回结果为list
    print(os.sep)                          #获取当前系统的路径分隔符  
    print(__file__)                        #打印当前文件的绝对路径
    print(os.path.abspath('a.py'))         #获取a.py的绝对路径
    print(os.path.abspath(__file__))       #获取当前文件的绝对路径
    print(os.path.dirname(__file__))       #获取当前文件的父级目录(也就是上一级目录信息)
    print(os.name)                         #获取当前系统的名称,win返回的是nt

    os模块常用的popen、system、exists、join等。
    os.system('ipconfig')                  #os.sysytem用来执行系统命令,运行ipconfig命令,直接显示
    res = os.system('ipconfig)             #执行系统命令的返回值,若命令执行成功则返回0 , 命令执行失败返回1
    result = os.popen('ipconfig')
    print(result)                         #通过popen方式执行系统命令,返回值:<os._wrap_close object at 0x00000000007D22B0>
    print(result.read())                   #获取系统执行命令的所有信息
    print(os.path.exists('test01'))        #判断文件或者目录是否存在,如果存在返回True
    print(os.path.isfile('ab.py'))         #判断当前目录下,输入的是否是一个文件,如果是文件则返回True
    print(os.path.isdir('test01'))         #判断是否是一个目录,如果是一个目录则返回True
    print(os.path.isabs(''))                #如果path是绝对路径,返回True
    print(os.path.join('e:', os.sep, 'aa', 'abc.txt'))  #拼接路径:e:aaabc.txt
    print(os.path.join('ac', 'test', 'python'))          #ac	estpython
    print(os.path.split('python_workspace/base-code/day6'))  #分隔目录和文件名,返回结果为元组:('python_workspace/base-code', 'day6')

    sys模块

    import sys
    res = sys.argv         #命令行参数,在Terminal输入命令:python rename.py b.txt 123 666 ,res接收到的结果为list,第一个元素是程序本身
    sys.exit(0)            #退出程序,正常退出时n=0
    sys.maxint             #最大的int值
    sys.path               #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform           #返回操作系统平台名称
    sys.stdout.write('please:')#向屏幕输出一句话
    val = sys.stdin.readline()[:-1]#获取输入的值

    time模块

    time&datetime模块主要用于时间操作,时间表示方式有:时间戳、格式化时间、时间元组

    import time
    print(time.time())                      #获取当前时间的时间戳
    print(time.strftime('%Y%m%d %H%M%S'))   #将时间元组转换为 格式化输出的字符串,可以调试自己需要的时间格式
    print(time.localtime())                 #将时间戳转换为时间元组,若不传时间戳,则默认获取当前时间的时间戳
    print(time.localtime(1498056319))       #将时间戳转换为时间元组:time.struct_time(tm_year=2017, tm_mon=6, tm_mday=21, tm_hour=22, tm_min=45, tm_sec=19, tm_wday=2, tm_yday=172, tm_isdst=0)
    print(time.mktime(time.localtime()))    #将时间元组转换为时间戳
    time.sleep(2)                           #休眠时间
    print(time.strptime('20170618 144037', '%Y%m%d %H%M%S'))  #将格式化后的时间转换为时间元组
    print(time.ctime(1498056319))            #将时间戳转换Wie格式化时间:Wed Jun 21 22:45:19 2017
    print(time.asctime())                   #将时间元组转换为格式化时间,Wed Jun 21 22:52:37 2017,标准时间

    datetime模块

    import datetime
    print(datetime.datetime.now())               #将当前时间格式化输出,类似time.strftime('%Y%m%d %H%M%S')
    print(datetime.datetime.now() + datetime.timedelta(2))    #2天后的时间2017-06-23 22:56:24.150894
    print(datetime.datetime.now() + datetime.timedelta(-1))   #1天前的时间2017-06-20 22:56:45.05809

     hashlib模块

     该模块主要用于加密相关操作,在Python3种代替了md5和sha模块,主要提供SHA1、SHA224、SHA256、SHA384、SHA512、MDS算法等。

    md5: 二进制格式的hash
    import hashlib
    print(bytes('hello', encoding='utf-8'))   #将字符串转换为字节,bytes类型
    md = hashlib.md5()        #创建md5对象,md的返回值:<md5 HASH object @ 0x00000000006C2710>
    md.update(b'hello')       #将字符串转换为bytes类型,该方法没有返回值
    print(md.digest())        #输出二进制格式的hash,加密后的结果:b']A@*xbcK*vxb9qx9dx91x10x17xc5x92'
    md5: 十六进制hash
    import hashlib
    print(bytes('hello', encoding='utf-8'))   #将字符串转换为字节,bytes类型
    md = hashlib.md5()        #创建md5对象,md的返回值:<md5 HASH object @ 0x00000000006C2710>
    md.update(b'hello')       #将字符串转换为bytes类型,该方法没有返回值
    print(md.hexdigest())     #输出十六进制格式的hash,加密后的结果:5d41402abc4b2a76b9719d911017c592
    SHA1: 十六进制hash
    import hashlib
    ha = hashlib.sha1()       #创建sha1对象
    ha.update(b'hello')       #进行加密
    print(ha.hexdigest())     #输出十六进制格式的hash,加密后的结果:aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
    SHA256: 十六进制hash (SHA224、SHA384、SHA512等加密方法,写法类似,分别创建对应加密方式的对象即可)
    import hashlib
    ha = hashlib.sha256()    #创建sha256对象
    ha.update(b'hello')
    print(ha.hexdigest())    #输出十六进制格式的hash,加密后的结果:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
    使用md5加密方式,对密码进行加密,如下:
    import hashlib
    def md5_pwd(pwd):
        md = hashlib.md5()
        md.update(bytes(pwd, encoding='utf-8'))       #m.update() 将字符串转换为bytes类型,需要传入bytes类型才可进行加密操作
        md_pwd = md.hexdigest()                       #将加密后的结果以16进制输出
        return md_pwd
    print(md5_pwd('123456'))         #加密后:e10adc3949ba59abbe56e057f20f883e

    加盐 

    md5对简单密码加密的话,可以通过撞库方法进行破解,可以使用加盐方式对密码再次进行复杂加密,实现方法如下:

     1 import hashlib
     2 #加盐,对密码进行复杂加密
     3 #盐值,由英文、特殊字符、中文随机组成
     4 SALT = 'asdf@#$%^DFG@!随便'
     5 
     6 def md5_test(pwd):
     7     md = hashlib.md5()                       #创建md5对象
     8     md.update(bytes(pwd, encoding='utf-8'))  #将pwd转换为bytes类型
     9     new_pwd = md.hexdigest()                 #将加密后的结果进行16进制输出
    10     return new_pwd
    11 
    12 if __name__ =='__main__':
    13     #在MD5加密的基础上再次进行复杂加密
    14     print(md5_test('123456'+SALT))
  • 相关阅读:
    Leetcode-Minimum Depth of Binary Tree
    Leetcode-Path Sum II
    Leetcode-Path Sum
    Leetcode-Flatten Binary Tree to Linked List
    Leetcode-Populating Next Right Pointer in Binary Tree II
    Leetcode-Pascal's Triangle II
    Leetcode-Pascal's Triangle
    Leetcode-Triangle
    第10月第20天 afnetwork like MKNetworkEngine http post
    第10月第13天 xcode ipa
  • 原文地址:https://www.cnblogs.com/lhly/p/7056640.html
Copyright © 2011-2022 走看看