day16

day 16 笔记

模块

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

对于包的定义:

  • py2:文件见中必须有 _ _init _ _.py 。

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

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

1.模块的调用

# import 模块 模块.函数()
import requests
# from 模块 import 函数 函数() 【as起别名 / *】
from b4s import *
# from 模块 import 函数 as 别名 别名()
fron bs4 import BeautifulSoup as s
'''
lizohng
- 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 函数 函数()

2.内置模块

2.1 os

2.2 sys

2.3 time

2.4 json

2.4.1 dumps

2.4.2 loads

2.4.3 注意 如果字典或列表中有中文,序列化时想保留中文

import json
v={'name':'alex','age':18,'cname':'金角大王'}
v1=json.dumps(v)
print(v1)   # {"name": "alex", "age": 18, "cname": "\u91d1\u89d2\u5927\u738b"}

v2=json.dumps(v,ensure_ascii=False)
print(v2)   # {"name": "alex", "age": 18, "cname": "金角大王"}

2.4.4 dump

import json
v={'name':'alex','age':18,'cname':'金角大王'}
with open ('json.txt',mode='w',encoding='utf-8') as file:
   v1=json.dump(v,file)  # 直接写入文件,json类型的字符串 {"name": "alex", "age": 18, "cname": "\u91d1\u89d2\u5927\u738b"}
   print(v1)

2.4.5 load

import json
with open ('json.txt',mode='r',encoding='utf-8') as file:
   v1=json.load(file) # 直接读取
   print(v1,type(v1)) # {'name': 'alex', 'age': 18, 'cname': '金角大王'} <class 'dict'>

2.5 haslib

2.6 random

2.7 getpass

2.8 shutil

2.9 copy

2.10 pickle

···json,优点:所有语言通用;缺点:只能序列化基本的数据类型 list/dict/int...

···pickle,优点:python中所有的东西都能被他序列化(socket对象);缺点:序列化的内容只有python认识。

2.10.1 dumps 和 loads

import pickle
info = {1,2,3,4}
v1=pickle.dumps(info)
print(v1)   # b'\x80\x04\x95\r\x00\x00\x00\x00\x00\x00\x00\x8f\x94(K\x01K\x02K\x03K\x04\x90.'
v2=pickle.loads(v1)
print(v2)   # {1, 2, 3, 4}
# dumps 和 loads 的功能与json相似,只是可以处理的数据类型更多,几乎所有的数据类型都能被序列化,产生pickle自己的数据

2.10.2 dump 和 load

import pickle
info = {1,2,3,4}
with open ('pickle.txt',mode='wb') as file:
   v=pickle.dump(info,file)   # 写入的是二进制

with open ('pickle.txt',mode='rb') as file:
   v1=pickle.load(file)
   print(v1)   # {1, 2, 3, 4}

2.11 shutil

import shutil

# 删除目录
# shutil.rmtree('test')

# 重命名
# shutil.move('test','ttt')

# 压缩文件
# shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong')

# 解压文件
# shutil.unpack_archive('zzh.zip',extract_dir=r'D:\code\xxxxxx\xxxx',format='zip')
import shutil
info = r'D:\YU PHOTOS'
shutil.make_archive('new_file','zip',info) # 文件名 格式 需要压缩的文件路径

shutil.unpack_archive(r'C:\Users\Usher\Desktop\homework\day16\new_file.zip',r'C:\Users\Usher\Desktop\homework\day16\lev1\lev2','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:\code\s21day16\lizhongwei')
# 文件名(目录+时间格式化) 格式 需要压缩的文件路径
file_path = os.path.join('code',ctime) + '.zip'  # 压缩文件 的 文件路径
shutil.unpack_archive(file_path,r'D:\x1','zip')

2.12 time 和 datetime

UTC/GMT:世界时间

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

2.12.1 time 模块

import time
time.time() # 时间戳 从格林威治时间 1970年1月1日 算起的多少秒
time.sleep(1) # 等待时间长度
time.timezone() # 时区

2.12.2 datetime 模块

from datetime import datetime,timezone,timedelta

# ##### 获取datetime格式时间 #####
v1=datetime.now()
print(v1) # 2020-05-12 18:21:10.704385
v2=timezone(timedelta(hours=7)) # 东七区 UTC+07:00
v3=timezone(timedelta(hours=-7)) # 西七区 UTC-07:00
print(datetime.now(v2)) # 东七区时间 2020-05-12 17:21:10.727391+07:00
print(datetime.now(v3)) # 西七区时间 2020-05-12 03:21:10.729390-07:00

# ##### 把datetime格式转换成字符串 #####
v1=datetime.now()
print(v1,type(v1)) # 2020-05-12 18:24:21.681545 <class 'datetime.datetime'>
V2=v1.strftime('%Y-%m-%d %H-%M-%S') # 转换成的格式,中间的连接符可以自定义
print(V2,type(V2)) # 2020-05-12 18-24-21 <class 'str'>

# ##### 字符串转成datetime #####
v1='2020/05/20 20/00/00'
v2=datetime.strptime(v1,'%Y/%m/%d %H/%M/%S') # 列出字符串的格式,方便电脑读取
print(v2,type(v2)) # 2020-05-20 20:00:00 <class 'datetime.datetime'>

# ##### datetime时间的加减 #####
v1='2020/05/20 20/00/00'
v2=datetime.strptime(v1,'%Y/%m/%d %H/%M/%S')
v3=v2-timedelta(days=20) # 减20天
v4=v2+timedelta(weeks=5) # 加5周
v5=v2-timedelta(hours=20) # 减20小时
info1=v3.strftime('%Y-%m-%d %H-%M-%S')
info2=v4.strftime('%Y-%m-%d %H-%M-%S')
info3=v5.strftime('%Y-%m-%d %H-%M-%S')
print(info1) # 2020-04-30 20-00-00
print(info2) # 2020-06-24 20-00-00
print(info3) # 2020-05-20 00-00-00

# ##### 时间戳和datetime关系 #####
import time
v1=time.time()
print(v1) # 打印当前时间戳
v2=datetime.fromtimestamp(v1) # 将此时间戳转换为datetime格式时间
print(v2)

v3=datetime.now() # 获取当前datetime格式时间
v4=v3.timestamp() # 将此时间转换为时间戳
print(v4)

2.13 异常处理

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
# 此循环会在遇到google时终止,并不会循环bing

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'])
posted @ 2020-05-12 18:50  投降输一半!  阅读(160)  评论(0编辑  收藏  举报