python-模块

发布时间:2019-05-28 22:39:39编辑:auto阅读(2214)

    一:模块的基本认识:

    1. 内置模块
      • 内置模块是python自带的功能,在使用内置模块相应功能时,需要先导入再使用  
    2.  第三方模块
      • 下载-->安装-->使用
        1.找到python所在的根目录-->再找到Scripts目录-->最后找到pip.exe
        2.把pip.exe所在的目录添加到环境变量中
        3.pip install 要安装的模块名称   #pip install xlrd
        
        #安装完成后,如果导入不成功
            - 重启pycharm
             - 安装错了 
    3. 自定义模块
      • 自己写一个模块(一个py文件) : aaa.py
        def f1():
            prinrt('f1')
        def f2():
            print('f2')
      • 在另一个py文件中调用模块中的功能 :a1.py
        #调自定义模块中的功能
        import aaa
        aaa.f1()
        aaa.f2() 
      • 运行
        a1.py 

    二:模块的调用

    1.示例一:

    # xxx.py
    
    def show():
        print('nihao')
    def func():
        pass
    
    print(111)
    #导入模块,加载此模块中的所有值到内存(一)
    import xxx
    print(222)
    ##调用模块中的函数
    xxx.func()

     

    #导入模块(二)
    from xxx import func,show
    from xxx import func
    from xxx import *
    func()

     

    #导入模块(三)
    from xxx import func as f  #起别名
    def func():
        print(222)
    f()

    2.示例二:

    xxxxxx  #(某个文件夹)
       -jd.py  #里面有个f1函数
       -tb.py
       -pdd.py
    import xxxxxx.jd
    jd.f1()
    from xxxxxx import jd
    jd.f1()

     

    from xxxxxx.jd import f1
    f1()

     

    3.总结

     

    模快和要执行的py文件在同一目录且需要模块中的很多功能时,推荐使用:import 模块

     

    • 其他推荐:from 模块 inport 模块 模块.函数()

    • 其他推荐:from 模块.模块 import 函数()

    三:内置模块及其使用方法

    • .random

      #获取6个Unicode对应表中十进制相对应的数据

      import
      random def get_random_code(length = 6): data = [] for i in range(length): v = random.randint(65,90) data.append(chr(v)) return ''.join(data) code = get_random_code() print(code)
      import random # 导入一个模块
      v = random.randint(起始,终止)  #得到一个随机数

     

    • .hashlib :用于加密相关的操作,代替了md5模块和sha模块

     

    • 将指定的'字符串'进行加密
      import hashlib
      def get_md5(num):
          obj = hashlib.md5()
          obj.update(data.encode(utf-8))
          result = obj.hexdigest()
          return result
      val = get_md5('某段数字')
      print(val)
    • 加盐 : (让密码更加安全)
      import hashlib
      
      def get_md5(data):         # md5括号内的内容越长,越不容易被破解
          obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))
          obj.update(data.encode('utf-8'))
          result = obj.hexdigest()
          return result
      
      val = get_md5('123')
      print(val)
    • sys : python解释器相关的数据
      • sys.getrefcount : 获取一个值的应用计数
        import sys  #导入模块
        a = [1,2,3]
        b = a
        print(sys.getrefcount(a)) 
        #结果为:3   相当于a被使用了三次
      • sys.getrecursionlimit : python中默认支持的递归数量
        import sys 
        print(sys.getrecursionlimit())
        # 结果为 :1000
      • sys.argv : 命令行参数,第一个元素是程序本身路径

        #写一个脚本,接收两个参数。

        
        
        • 第一个参数:文件
        • 第二个参数:内容
        
        

        #请将第二个参数中的内容写入到 文件(第一个参数)中

        import sys
        
        if len(sys.argv) < 3:
            print('参数不够,请重新运行')
        else:
            file_path = sys.argv[1]
            content = sys.argv[2]
            with open(file_path,mode='w',encoding='utf-8') as f:
                f.write(content) 
      • sys.path : 默认python去导入模块时,会按照sys.path中的路径挨个查找
        import sys
        sys.path.append('D:\\')
        import oldboy
    • os : 和操作系统相关的数据
      • os.path.exists(path) , 如果path存在,返回True;如果path不存在,返回False
      • os.stat('某个文件').st_size : 获取文件大小

      • os.path.abspath() : 获取一个文件的绝对路径

        path = '某个需要查看路径的文件' 
        
        import os
        v1 = os.path.abspath(path)
        print(v1)  # 这个文件所在的全部目录

         

      • os.path.dirname : 获取路径的上级目录
        import os
        v = r"C:\python36\新建文件夹\python36.exe D:/第三周/day14.py"
        print(os.path.dirname(v))
        
        #C:\python36\新建文件夹\python36.exe D:/第三周   一级一级往上走 
      • os.path.join : 路径的拼接
        import os
        path = "C:\python36\新建文件夹\python36.exe" 
        v = 'n.txt'
        
        result = os.path.join(path,v)
        print(result)
        #C:\python36\新建文件夹\python36.exe \n.txt
        
        result = os.path.join(path,'n1','n2','n3')
        print(result)
        #C:\python36\新建文件夹\python36.exe \n1\n2\n3
      • os.listdir :查看一个目录下所有的文件(第一层)
        import os
        result  = os.listdir(r'D:\untitled')
        for i in result:
            print(i)
      • os.walk : 查看一个目录下所有的文件(所有层)
        import os
        
        result = os.walk(r'D:\untitled')
        for a,b,c in result:
            # a,正在查看的目录 b,此目录下的文件夹  c,此目录下的文件
            for item in c:
                path = os.path.join(a,item)
                print(path)
      •  os.makedirs 创建目录和子目录

     

      • os.rename 重命名
        import os
        os.rename('某个文件的名字','想要修改后的名字')
      • os.stat 读取文件大小
        import os
        #1.读取文件大小(字节)
        file_size = os.stat('某个文件').st_size
        #2. 一点一点读取文件
        read_size = 0
        with open('某个文件',mode='rb') as f1,open('将要写入的文件',mode='wb') as f2:
            while read_size < file_size:
                chunk = f1.read(1024) #每次最多去读取1024字节
                f2.write(chunk)
                read_size += len(chunk)
                val = int(read_size / file_size * 100)   #查看打印进度
                print('%s%%\r' %val ,end='')
    • json&pickle

      • json : 一个特殊的字符串 [长得像列表/字典/字符串/数字/真假]

        • 优点:所有语言通用;缺点:只能序列化基本的数据类型

        • json.dumps 序列化

        • json.loads 反序列化

      • pickle:优点:python中所有的东西都能被他序列化 缺点:序列化的内容只有python认识
        import json
        #序列化:将python的值转换为json格式的字符串
        v = [11,22,{'k1':'v1'},True,'ggg']
        v1 = json.dumps(v)
        print(v1)    #"[11, 22, {"k1": "v1"}, true, "ggg"]"
        
        #反序列化 : 将json格式的字符串转换成python的数据类型
        v2 = '["alex",123]'
        print(type(v2))  #字符串类型
        v3 = json.loads(v2)
        print(v3,type(v3))   #['alex', 123] <class 'list'>
      • 字典或列表中如有中文,序列化时想要保留中文显示
        v = {'k1':'alex','k2':'李杰'}
        
        import json
        val = json.dumps(v,ensure_ascii=False)
        print(val)

     

      • 注意:

        • json 最外层必须是容器类的,如列表/字典,元组会被转换为列表.

        • 里面的内容可以是:str int bool list tuple 集合不能存在于json中

        • 字串必须使用双引号(" ")连接

     

     

    • shutil

      • 删除目录

        import shutil
        shutil.rmtree('要删除的目录')

         

         

      •  重命名
        import shutil
        shutil.move('原目录','修改后的目录')

         

      •  压缩文件 shutil.make_archive
        import shutil
        shutil.make_archive('要压缩的文件','文件的后缀名(如zip)','要压缩到的路径')

         

      •  解压文件 shutil.unpack_archive
        import shutil
        shutil.unpack_archive('要解压的文件',extract_dir=r'D:\code\xxxxxx\xxxx',format='zip')

         

    • time&datetime

      • UTG/GMT 世界时间

      • 本地时间 本地时区的时间

      • time :

        1. time.time() 时间戳(获取当前时间) 从1970-1-1 00:00 后走过的秒数

        2. time.sleep(8) 等待的秒数

      •  获取datetime格式时间
        import time
        from datetime import datetime,timezone,timedelta
        
        v1 = datetime.now()  # 获取当前本地时间
        print(v1)            # 2019-04-18 16:39:31.802269
        
        tz = timezone(timedelta(hours=7)) #当前东7区时间  (如要获取西7区时间 hours=-7)
        v2 = datetime.now(tz)
        print(v2)         #2019-04-18 15:39:31.802269+07:00   (中国在东8区,所以慢一个小时)
        
        v3 = datetime.utcnow()    #当前UTC时间(世界时间)
        print(v3)                 #2019-04-18 08:39:31.802269  (比中国时间慢8个小时)

         

      •  把datetime格式转换成字符串 (strftime)
        import time
        from datetime import datetime,timezone,timedelta
        
        v1 = datetime.now()
        val = v1.strftime("%Y-%m-%d %H:%M:%S")  #(年-月-日 时:分:秒)
        print(val)    #2019-04-18 16:48:29

         

      •  字符串转成datetime格式 datetime.strptime
        import time
        from datetime import datetime,timezone,timedelta
        
        v1 = datetime.strptime('2019-4-18','%Y-%m-%d')
        print(v1,type(v1))  # 2019-04-18 00:00:00 <class 'datetime.datetime'>

         

      •  datetime时间的加减
        import time
        from datetime import datetime,timezone,timedelta
        
        v1 = datetime.strptime('2008-08-08','%Y-%m-d')   
        v2 = v1-timedelta(days=150)   #括号里的内容可以是:(year+或-  month+或-)
        data = v2.strftime('%Y-%m-%d')
        print(data)  #2008-03-11
        
        #先转换为datetime格式进行加减,然后转换为字符串格式打印出来

         

      •  时间戳和datetime的关系
        import time
        from datetime import datetime,timezone,timedelta
        
        ctime = time.time()
        print(ctime)  # 1555578896.8276453
        v1 = datetime.fromtimestamp(ctime)
        print(v1) # 2019-04-18 17:14:56.827645
        
        v1 = datetime.now()
        val = v1.timestamp()
        print(val)  #1555579030.002739

         

     四:异常处理

    #固定搭配
    
     try:
    
    
     except Exception as e:
    #写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果。
    import requests 
    def func(url_list):
        result = []
        try:
            for url in url_list:
                response = requests.get(url)
                result.append(response.text)
        except Exception as e:
            pass
        return result    #['http://www.baidu.com']  (中国无法访问谷歌)
    
    def func2(url_list):
        result = []
        for url in url_list:
            try:
                response = requests.get(url)
                result.append(response.text)
            except Exception as e:
                pass
        return result   #['http://www.baidu.com','http://www.bing.com']
    
    func(['http://www.baidu.com','http://www.google.com','http://www.bing.com']) 

     

关键字