20200226----python学习第16天

今日内容

  模块基础知识

  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():
pass
print(456)

示例二  

#导入模块,加载模块中所有的值到内存中
import lizhongwei
print('你好')
#调用模块中的函数
lizhongwei.fun()

#导入模块
from lizhongwei import func,show
from lizhongwei import func
from lizhongwei import show
from 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.jd
lihao.jd.func()

#调用二
from lihao import jd
jd.func()

#调用三
from lihao.jd import func
func()

  总结

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

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

  练习题

import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)

import client.py
import x.py
from lib import jb
jd.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 json
val1 = 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 json
v = {'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 json
v = {'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 pickle
v = {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 pickle
v = {1,2,3,4}
f = open('x.txt',mode = 'wb')
val = pickle.dump(v ,f )
f.close()
print(val ,type(val))
#生成一个x.txt文件,val = None

f = 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文件夹重命名为ttt
shutil.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 os
import shutil
from datetime import datetime
ctime = 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 time
from datetime import datetime,timezone,timedelta
#########################获取datetime格式时间##########################################
"""
v1 = datetime.now() #获取当前时间
print(v1) #输出内容为:2020-02-27 11:24:57.662815
v2 = timezone(timedelta(hours=7)) #当前东7区时间
v3 = datetime.now(v2)
print(v2,v3) #输出内容为:UTC+07:00 2020-02-27 10:24:57.662815+07:00
v4 = 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.987247
v1 = datetime.fromtimestamp(ctime)
print(v1) #输出内容为:2020-02-27 11:50:03.987247

v2 = 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 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'])

总结

  高阶函数(5*)

    嵌套/装饰器

  模块分类和定义 (4*)

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

    第三方模块:request/xlrd

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

  导入模块

    sys.path

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

  异常处理

   try:

    pass

  excep Exception as e:

    pass

猜你喜欢

转载自www.cnblogs.com/limin1027/p/12368613.html
今日推荐