20200226----python学习第16天

孤人 提交于 2020-02-27 12:53:22

今日内容

  模块基础知识

  time/datetime

  json/picle

  shutil

  logging

  其他

内容回顾与补充

  (1)模块(类库):内置/第三方模块/自定义

  面试题:列举常用内置模块:json/time/os/sys

  (2)定义模块

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

  对于包的定义:

    py2:文件夹中必须有--init--.py

    py3:不需要--init--.py

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

模块的调用

示例一 

#lizhongwei.py#/urn/bin/env python#-*- coding:utf-8 -*-def show():    print('123')def func():    passprint(456)

示例二  

#导入模块,加载模块中所有的值到内存中import lizhongweiprint('你好')#调用模块中的函数lizhongwei.fun()#导入模块from lizhongwei import func,showfrom lizhongwei import funcfrom lizhongwei import showfrom lizhongwei import *func()#导入模块from lizhongwei import func as f:def func():    print('你好,大家好')func()f()#导入模块import 模块  #调用方法:模块.函数名()from 模块 import 函数 #调用方法:函数名()【as可以起别名/* 表示所有】from 模块 import 函数名 as 别名  #调用方法:别名()

示例三

lihao    --jd.py    --tb.py    --pdd.py包.py#调用一import lihao.jdlihao.jd.func()#调用二from lihao import jdjd.func()#调用三from lihao.jd import funcfunc()

  总结

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

    #注意:sys.path的作用是什么:
    #模块导入时默认加载的路径列表

  练习题

import osimport sysBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))print(BASE_DIR)import client.pyimport x.pyfrom lib import jbjd.func()

内置模块

  (1)random

   (2)hashlib

   (3)getpass 

   (4)time

   (5)os

   (6)sys

   (7)json dumps/loads/dump/load

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

示例一:json.dumps():序列化为json格式特殊的字符串,如果中文想正常展示

v = {'k1':'alex','k2':'你好,大家好'}import jsonval1 = json.dumps(v)val2 = json.dumps(v,ensure_ascii=False)print(val1,val2)#输出结果为:{"k1": "alex", "k2": "\u4f60\u597d\uff0c\u5927\u5bb6\u597d"} {"k1": "alex", "k2": "你好,大家好"}

示例二:json.dump():将字符串写入到一个文件中

import jsonv = {'k1':'alex','k2':'你好,大家好'}f = open('a.txt',mode = 'w',encoding = 'utf-8')val = json.dump(v,f)print(val)  #输出结果为None,说明json.dump()函数没有返回值f.close()#写文a.txt中的内容为:{"k1": "alex", "k2": "\u4f60\u597d\uff0c\u5927\u5bb6\u597d"},说明得到的是unicode编码

示例三:json.load():反序列化一个文件即读一个文件

import jsonv = {'k1':'alex','k2':'你好,大家好'}f = open('a.txt',mode = 'r',encoding = 'utf-8')val = json.load(f)f.close()print(val,type(val))  #输出结果为{'k1': 'alex', 'k2': '你好,大家好'} <class 'dict'>

示例四:介绍json中dump与load的使用

######################dumps/loads###########################import picklev = {1,2,3,4}val = pickle.dumps(v)print(val,type(val))#b'\x80\x04\x95\r\x00\x00\x00\x00\x00\x00\x00\x8f\x94(K\x01K\x02K\x03K\x04\x90.' <class 'bytes'>#输出的是二进制字节data = pickle.loads(val)print(data,type(data)) #输出结果为:{1, 2, 3, 4} <class 'set'>#pickle可以序列化函数示例def f1():    print('f1')v1 = pickle.dumps(f1)print(v1)v2 = pickle.loads(v1)v2()######################dump/load###########################import picklev = {1,2,3,4}f = open('x.txt',mode = 'wb')val = pickle.dump(v ,f )f.close()print(val ,type(val))#生成一个x.txt文件,val = Nonef = open('x.txt', mode = 'rb')data = pickle.load(f)f.close()print(data,type(data)) #输出结果为:{1, 2, 3, 4} <class 'set'>

   (8)shutil

import shutil#删除目录shutil.rmtree('要删除的路径')#重命名 将test文件夹重命名为tttshutil.move('test','ttt')#压缩文件shutil.make_archive('被压缩后的文件名','要压缩成的文件类型','要压缩的文件')#示例:shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong')#解压文件shutil.unpack_archive('要解压的文件',extract_dic='要解压到那个目录,如果目录不存在就自动创建',format='要解压的文件类型')#示例:shutil.unpack_archive('zzh.zip',extract_dir=r'D:\code\xxxxxx\xxxx',format ='zip')

示例:

import osimport shutilfrom datetime import datetimectime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')print(ctime) #输出结果为:2020-02-27-10-52-40#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:\code\s21day16\lizhongwei')file_name = os.path.join('code',ctime)+'.zip'shutil.unpack_archive('file_name',extract_dir=r'd:\x1',format ='zip')

   (9)copy

今日内容

  1.json和pickle

  2.shutil模块

  3.time&datetime 

    UTC/GMT:世界时间

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

    time模块  

      import time      v=time.time() #时间戳:1582773401.9662914      print(v)      time.sleep(10) #等待10秒钟      time.timezone #时区

    datetime

示例: 

import timefrom datetime import datetime,timezone,timedelta#########################获取datetime格式时间##########################################"""v1 = datetime.now() #获取当前时间print(v1)  #输出内容为:2020-02-27 11:24:57.662815v2 = timezone(timedelta(hours=7)) #当前东7区时间v3 = datetime.now(v2)print(v2,v3) #输出内容为:UTC+07:00 2020-02-27 10:24:57.662815+07:00v4 = datetime.utcnow() #获取utc时间print(v4) #输出内容为:2020-02-27 03:24:57.662815"""#########################把datetime格式转换为字符串#####################################"""v1 = datetime.now() #获取当前时间print(v1,type(v1))  #输出内容为:2020-02-27 11:28:25.304218 <class 'datetime.datetime'>val = v1.strftime("%Y-%m-%d %H:%M:%S")print(val,type(val)) #输出内容为:2020-02-27 11:28:25 <class 'str'>"""#########################把字符串转换为datetime类型#####################################"""v1 = datetime.strptime('2011-11-11','%Y-%m-%d')print(v1,type(v1)) #2011-11-11 00:00:00 <class 'datetime.datetime'>"""#########################datetime时间的加减#####################################"""v1 = datetime.strptime('2011-11-11','%Y-%m-%d')v2 = v1 - timedelta(days=140)print(v2,type(v2)) #输出结果为:2011-06-24 00:00:00 <class 'datetime.datetime'>v3 = v2.strftime('%Y-%m-%d')print(v3,type(v3)) #输出结果为:2011-06-24 <class 'str'>"""#########################时间戳和datetime关系#####################################'''ctime = time.time()print(ctime)  #输出内容为:1582775403.987247v1 = datetime.fromtimestamp(ctime)print(v1)    #输出内容为:2020-02-27 11:50:03.987247v2 = datetime.now()val = v2.timestamp()print(val,type(val)) #输出内容为:1582775403.987247 <class 'float'>'''

  4.logging

  5.异常处理

示例一:  

try:    val = input("请输入数字")    num = int(val)except Exception as e :    print("操作异常")

示例二:

import requeststry:    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 Falsev = func('alex')if not v :    print('函数执行失败')else:    print('结果是:',v)

练习题:

# 1. 写函数,函数接受一个列表,请将列表中的元素每个都 +100def func(arg):    result = []    for item in arg:        if item.isdecimal():            result.append(int(item) +100)    return result# 2. 写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果。import requestsdef func(url_list):    result = []    try:        for url in url_list:            response= requests.get(url)            result.append(response.text)    except Exception as e:        pass    return resultdef func2(url_list):    result = []    for url in url_list:        try:            response= requests.get(url)            result.append(response.text)        except Exception as e:            pass    return resultfunc(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])

总结

  高阶函数(5*)

    嵌套/装饰器

  模块分类和定义 (4*)

    内置模块:time/json.......

    第三方模块:request/xlrd

    自定义模块:文件/文件夹+init.py【包】

  导入模块

    sys.path

    导入:import xx / from xx.xxx import xxxx

  异常处理

   try:

    pass

  excep Exception as e:

    pass

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!