• python笔记16


    1.今日内容

    • 模块基础知识
    • time/datetime
    • json/picle
    • shutil
    • logging
    • 其他

    2.内容回顾和补充

    2.1模块(类库)

    • 内置
    • 第三方
    • 自定义

    面试题:

    • 列举常用内置模块:json / time / os/ sys

    2.2 定义模块

    定义模块时可以把一个py文件或一个文件夹(包)当作一个模块,以方便于以后其他py文件的调用 。

    对于包(文件夹)的定义

    • py2:文件见中必须有 _ _init _ _.py 。手工创建此文件即可。

      在pycharm中手工创建python package时候,默认自动会在这个文件中创建--init--.py文件。

    • py3:不需要 _ init _.py .

    推荐大家以后写代码时,都要加上此文件。

    2.3 模块的调用

    2.3.1 示例一

    # lizhongwei.py
    
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    def show():
        print('我司里种种')
    
    def func():
        pass
    
    print(456)
    
    # 导入模块,加载此模块中所有的值到内存。所以此时先打印出:456。后打印该代码块下面的123。
    import lizhongwei
    
    print(123)
    # 调用模块中的函数
    lizhongwei.func()
    
    # 导入模块
    from lizhongwei import func,show
    from lizhongwei import func
    from lizhongwei import show
    from lizhongwei import *
    
    func()#from导入方法,直接使用函数。
    
    # 导入模块
    from lizhongwei import func as f#别名法,防止func函数与现有代码中函数重名。
    
    def func():
        print(123)
    f()
    

    导入模块:

    • import 模块 使用方式:模块.函数()
    • from 模块 import 函数 使用方式:函数()
    • from 模块 import 函数 as 别名 使用方式:别名()

    2.3.2 示例二

    lizhong
    	- jd.py
        - pdd.py
        - tb.py
    包.py
    
    #上个代码框中的文件夹中文件,引用如下方法:
    import lizhong.jd
    lizhong.jd.f1()
    
    from lizhong import jd
    jd.f1()
    
    from lizhong.jd import f1
    f1()
    

    总结

    • 模块和要执行的py文件在同一目录 且 需要 模块中的很多功能时,推荐用: import 模块
    • 其他推荐:from 模块 import 模块 用法:模块.函数()
    • 其他推荐:from 模块.模块 import 函数 用法:函数()

    注意: sys.path的作用是什么?sys.path默认在py的安装目录和执行文件当前所在的目录。

    1、如果要增加非py安装目录下,需要append非py安装目录。sys.path.append('path')。

    然后在引用目录下的py文件就可以引用成功:如:import page

    2、如果page的上级目录和执行的文件在同一个目录(lib),这样引用也可以:

    from lib import page

    3、如果page和执行的py文件在同一个目录下,直接引用即可。

    import page

    练习题

    将父级目录加入sys.path中,方便后期调用此父级下的代码块。
    import sys
    v=sys.path
    print(v)
    import os
    print(__file__)
    print(os.path.dirname(__file__))
    print(os.path.abspath(__file__))
    print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(DIR)
    print(sys.path)
    ===
    ['C:\python\venv', 'C:\python', 'C:\python\python36\python36.zip', 'C:\python\python36\DLLs', 'C:\python\python36\lib', 'C:\python\python36', 'C:\python\python36\lib\site-packages', 'C:\python\PyCharm 2019.2.2\PyCharm 2018.2.1\helpers\pycharm_matplotlib_backend']
    C:/python/venv/day15.py
    C:/python/venv
    C:pythonvenvday15.py
    C:python
    ['C:\python\venv', 'C:\python', 'C:\python\python36\python36.zip', 'C:\python\python36\DLLs', 'C:\python\python36\lib', 'C:\python\python36', 'C:\python\python36\lib\site-packages', 'C:\python\PyCharm 2019.2.2\PyCharm 2018.2.1\helpers\pycharm_matplotlib_backend', 'C:\python']
    
    

    2.4 内置模块

    • os

    • sys

    • time

    • json

      • dumps

        • dump(v,f)#将v写入文件f中。
      • loads

        • print(load(f)),打印文件中内容。
      • 注意:

        • 字典或列表中如有中文,序列化时想要保留中文显示:

          v = {'k1':'alex','k2':'李杰'}
          
          import json
          val = json.dumps(v,ensure_ascii=False)#保留中文
          print(val)
          
        • dump

          import json
          
          v = {'k1':'alex','k2':'李杰'}
          
          f = open('x.txt',mode='w',encoding='utf-8')
          val = json.dump(v,f)
          print(val)
          f.close()
          
        • load

          import json
          
          v = {'k1':'alex','k2':'李杰'}
          
          f = open('x.txt',mode='r',encoding='utf-8')
          
          data = json.load(f)
          f.close()
          
          print(data,type(data))
          
    • haslib

    • random

    • getpass

    • shutil

    • copy

    3. 今日内容

    3.1 json和pickle

    • json,优点:所有语言通用;缺点:只能序列化基本的数据类型 list/dict/int...
    • pickle,优点:python中所有的东西都能被他序列化(socket对象);缺点:序列化的内容只有python认识。
    import pickle
    
    # #################### dumps/loads ######################
    """
    v = {1,2,3,4}
    val = pickle.dumps(v)#序列化出来不可读
    print(val)
    data = pickle.loads(val)
    print(data,type(data))
    """
    
    """
    #序列化函数(json做不到):
    def f1():
        print('f1')
    
    v1 = pickle.dumps(f1)
    print(v1)
    v2 = pickle.loads(v1)
    v2()
    """
    
    # #################### dump/load ######################
    # v = {1,2,3,4}
    # f = open('x.txt',mode='wb')
    # val = pickle.dump(v,f)
    # f.close()
    
    # f = open('x.txt',mode='rb')
    # data = pickle.load(f)
    # f.close()
    # print(data)
    
    ==================
    encording后称作字节
    json:得出来的是字符串
    pickle:得出来的是字符串
    

    3.2 shutil 模块

    import shutil
    
    # 删除目录
    # shutil.rmtree('test')
    
    # 重命名,文件和目录都可以
    # shutil.move('test','ttt')
    
    # 压缩文件
    # shutil.make_archive('zzh','zip','D:codes21day16lizhong')
    
    # 解压文件,有目录直接解压,无目录,则直接创建
    # shutil.unpack_archive('zzh.zip',extract_dir=r'D:codexxxxxxxxxx',format='zip')
    

    示例

    import os
    import shutil
    from datetime import datetime
    ctime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
    
    # 1.压缩lizhongwei文件夹 zip
    # 2.放到到 code 目录(默认不存在)
    # 3.将文件解压到D:x1目录中。
    
    if not os.path.exists('code'):
        os.makedirs('code')
    shutil.make_archive(os.path.join('code',ctime),'zip','D:codes21day16lizhongwei')
    
    file_path = os.path.join('code',ctime) + '.zip'
    shutil.unpack_archive(file_path,r'D:x1','zip')
    

    3.3 time&datetime

    UTC/GMT:世界时间

    本地时间:本地时区的时间。

    3.3.1 time模块

    • time.time() ,时间戳:1970-1-1 00:00
    • time.sleep(10),等待秒数。
    • time.timezone
    # https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4ZwIFHM6iw==&tip=1&r=-781028520&_=1555559189206
    

    3.3.2 datetime模块

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import time
    from datetime import datetime,timezone,timedelta
    
    # ######################## 获取datetime格式时间 ##############################
    """
    v1 = datetime.now() # 当前本地时间
    print(v1)
    tz = timezone(timedelta(hours=7)) # 当前东7区时间
    v2 = datetime.now(tz)
    print(v2)
    v3 = datetime.utcnow() # 当前UTC时间
    print(v3)
    """
    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    # ######################## 把datetime格式转换成字符串 ##############################
    # v1 = datetime.now()
    # print(v1,type(v1))
    # val = v1.strftime("%Y-%m-%d %H:%M:%S")
    # print(val)
    
    # ######################## 字符串转成datetime ##############################
    # v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
    # print(v1,type(v1))
    
    # ######################## datetime时间的加减 ##############################
    # v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
    # v2 = v1 - timedelta(days=140)
    # date = v2.strftime('%Y-%m-%d')
    # print(date)
    
    # ######################## 时间戳和datetime关系 ##############################
    # ctime = time.time()
    # print(ctime)
    # v1 = datetime.fromtimestamp(ctime)
    # print(v1)
    
    # v1 = datetime.now()
    # val = v1.timestamp()
    # print(val)
    

    3.4异常处理

    try:
        val = input('请输入数字:')
        num = int(val)
    except Exception as e:
        print('操作异常')
    
    # import requests
    #
    # try:
    #     ret = requests.get('http://www.google.com')
    #     print(ret.text)
    # except Exception as e:
    #     print('请求异常')
    
    def func(a):
        try:
            return a.strip()
        except Exception as e:
            pass
        return False
    
    v = func('alex')
    if not v:
        print('函数执行失败')
    else:
        print('结果是',v)
    

    练习题

    # 1. 写函数,函数接受一个列表,请将列表中的元素每个都 +100
    def func(arg):
        result = []
        for item in arg:
            if item.isdecimal():
                result.append(int(item) + 100)
    	return result 
    
    # 2. 写函数去,接受一个列表。列表中都是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 
    
    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 
    
    func(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])
    
    异常处理结构:
    try:
        pass
    except Exception as e:
        pass 
    
  • 相关阅读:
    SpringMVC处理请求
    SpringMVC的启动
    数据结构
    Collections工具类
    位运算
    web应用
    spring Environment
    servlet及jsp之间的请求转发
    spring AOP
    Spring 事件
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12297314.html
Copyright © 2020-2023  润新知