(七)模块

一、内置模块

1.hashlib

import hashlib

def get_md5(str_to_code):
    obj = hashlib.md5()
    obj.update(str_to_code.encode("utf-8"))  #明文
    res = obj.hexdigest()
    return res


val = get_md5('123')
print(val)

2.random

3.getpass

import getpass

pwd = getpass.getpass('请输入密码:')
if pwd == '123':
    print('success')

4.time/datetime【时间相关】

4.1 datetime
# ======================获取datatime 格式的时间================
from datetime import datetime
#获取当前本地时间,并将其转化成字符串格式的时间
ctime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
#当前utc时间/伦敦时间
utctime = datetime.utcnow()
print(ctime,type(ctime))


#东2区的时间
tz = timezone(timedelta(hours=2))
v3 = datetime.now(tz)
print(v3)


'''
2021-02-14-11-30-29 <class 'str'>
2021-02-14 03:30:29.510515 <class 'datetime.datetime'>
2021-02-14 05:30:29.510515+02:00
'''
# ======================字符串转换成datatime================

v1 = datetime.strptime('2011-3-12','%Y-%m-%d')
print(v1,type(v1))

# ======================datatime加/减40天12小时================
v2 = v1+timedelta(days=40,hours=12)
print(v2)
v3 = v2.strftime('%Y-%m-%d')
print(v3)


# ======================datatime与时间戳time之间的关系================


import time
from datetime import datetime
ctime = time.time()
print(ctime)
v1 = datetime.fromtimestamp(ctime)
print(v1)


v2 = datetime.now()
val = v1.timestamp()
print(val)

'''
1613274068.5548413
2021-02-14 11:41:08.554841

1613274148.203175
'''
  • 练习题
1. 压缩jd文件夹  zip
2. 将zip放到code目录(code默认不存在)
3. 将文件加压到指定目录中
import os
import shutil

if not os.path.exists('code'):
    os.makedirs('code')
shutil.make_archive(os.path.join('code',ctime),'zip',r'C:\Users\10500\Desktop\AI_Learning\1_python_learning\02_函数\01_函数\lib')

file_path = os.path.join('code',ctime)+'.zip'
path = r'C:\Users\10500\Desktop\AI_Learning\1_python_learning\02_函数'
shutil.unpack_archive(file_path,path,'zip')

4.2 time

UTC/GMT: 世界时间
本地时间:本时区的时间

1. time.time()  时间戳,1970年1月1日0点0分开始经历的秒数(伦敦)  ;1970年1月1日8点0分开始经历的秒数(中国) 155.../166....对这个敏感点
2. time.sleep(10)  :等待的秒数
3. time.timezone()   电脑设置与伦敦时间差距的秒数

在这里插入图片描述

5. sys:python解释器相关

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称
sys.stdin          输入相关
sys.stdout         输出相关
sys.stderror       错误相关
  • sys.getrefcount(a) a变量的使用次数
a= [11,22,33]
b = a
print( sys.getrefcount(a))
  • sys.getrecursionlimit() :python解释器支持的递归数量
v1 = sys.getrecursionlimit()
print(v1)
  • sys.stdout.write(‘你好’) :类似于print,但是默认不加换行符->print 进度条
sys.stdout.write('你好')
sys.stdout.write('啊')

复制文件进度条

import os
#1. 读取文件大小(字节)
file_size = os.stat('CT.mp4').st_size

#2. 一点一点的读取文件
read_size = 0
with open('CT.mp4',mode='rb') as f,open('a.mp4',mode='wb') as f2:
    while read_size<file_size:
        chunk = f.read(1024)
        f2.write(chunk)
        read_size +=len(chunk)
        val = int(read_size/file_size)*100
        print('{}%\r'.format(val),end='')

  • sys.argv()【重要】

  • sys.path()【重要】
    python导入模块,默认在sys.path中的路径挨个进行寻找,如果想要增加,可以通过sys.path.append
    在这里插入图片描述
    当如果想要导入其他路径之时,可以通过以下操作即可。

import sys
sys.path.append(r'path')

6. os [路径相关]

  1. os.stat(’'CT.mp4).st_size 获取文件大小```
  2. os.path.exists(path) 如果path存在,返回True,否则,返回False
  3. ps.path.abspath() 获取绝对路径
  4. os.path.dirname(v1) 获取上级目录
  5. os.path.join(v2,‘07_模块.py’,‘xxxxx’) 路径拼接
  6. os.listdir(r’C:\Users\10500\Desktop\AI_Learning\1_python_learning\01_python_basic’) 查看一个目录下第一层所有的文件【第一层】
  7. os.walk(r’C:\Users\10500\Desktop\AI_Learning\1_python_learning\01_python_basic’) 查看一个目录下所有层所有的文件【所有层】
  8. os.mkdir 创建一级目录
  9. os.makedirs 创建多级目录
  10. os.rename 重命名
import os
v1 = os.path.abspath('07_模块.py')   #获取文件的绝对路径
print(v1)

v2 = os.path.dirname(v1)   #获取上级目录
print(v2)

v3 = os.path.join(v2,'07_模块.py','xxxxx')   #路径拼接
print(v3)

# 查看一个目录下所有的文件
v4 = os.listdir(r'C:\Users\10500\Desktop\AI_Learning\1_python_learning\01_python_basic')
print(v4)

v5 = os.walk(r'C:\Users\10500\Desktop\AI_Learning\1_python_learning\01_python_basic')
for a,b,c in v5 :
    print(a,b,c)
# a. 正在查看的目录
# b.此目录下的文件夹
# C.此目录下的文件

import os
file_path = r'db\user.txt'
file_path2 = r'db1\db2\user.txt'
os.mkdir('db')
with open(file_path,mode='w',encoding='utf-8') as f:
    f.write('sdsdg')

os.makedirs('db1\db2\db3')
with open(file_path2,mode='w',encoding='utf-8') as f:
    f.write('sdsdg')

在这里插入图片描述
当已经创建完目录之后,再运行程序就会报错,为了防止此类情况,可写下如下代码
在这里插入图片描述

file_path2 = r'db1\db2\db3\user.txt'
file_folder= os.path.dirname(file_path2)
if not os.path.exists(file_folder):
    os.makedirs(file_folder)
with open(file_path2,mode='w',encoding='utf-8') as f:
    f.write('sdsdg')

7. shutil

1. 删除路径  shutil.rmtree(path)  
2. 中命名
3. 压缩文件
4. 解压文件
import shutil
# 删除目录(只能是文件夹)
shutil.rmtree(path)
#重命名(文件夹或者文件)
shutil.move('x.txt','xx.txt')
#压缩文件
shutil.make_archive('name','zip',r'C:\Users\10500\Desktop\AI_Learning\1_python_learning\02_函数\01_函数\lib')

#解压文件
shutil.unpack_archive('name.zip',extract_dir='path',format='zip')



在这里插入图片描述

8. json

json是一个特殊的字符串,【长得像列表/字典/字符串/数字/真假等】
序列化,将列表/字典/字符串/数字/真假转换成json。反之则称为反序列化。

8.1 json的数据类型要求
  • 内部数据只能是【int/str/list/dict/bool】
  • 最外层必须是容器类型【dict/list】
  • 在json中如果包含字符串,字符串里边的格式必须是双引号。
  • json格式中不存在元组和集合

dumps,loads常见的数据类型
在这里插入图片描述

import json
v= [12,3,4,{'j':'k'},True,'asf']
#1. 将数据序列化,将python的值转换成json格式的字符串  
v1 = json.dumps(v)
print(v1)

v2 = '["alex",123]'
print(type(v2))
#将数据反序列化,将json格式的字符串转换成python的数据类型
v3 = json.loads(v2)
print(type(v3))


'''
[12, 3, 4, {"j": "k"}, true, "asf"]
<class 'str'>
<class 'list'>
'''
  • 面试题:常用的内置模块 (类库):json/time /os/sys
  • 模块可以是一个Py文件,也可以是一个文件夹。
8.2 json序列化
    1. 字典或列表中如果有中文,序列化时想要保留中文显示,则通过以下操作
      在这里插入图片描述
import json
v1 = {'k1':'v2',"k2":"李连杰"}
res = json.dumps(v1,ensure_ascii=False)
print(res)

'''
{"k1": "v2", "k2": "李连杰"}
'''

使用**dump()**函数,将内容写入文件中
在这里插入图片描述

import json
v1 = {'k1':'v2',"k2":"李连杰"}
with open('x.txt',mode='w',encoding='utf-8') as f:
    res = json.dump(v1 , f,ensure_ascii=False)
    print(res)

使用load()函数,将文件中的内容读出,并进行反序列化

with open('x.txt',mode='r',encoding='utf-8') as f:
    res = json.load(f)
    print(res)
    print(type(res))

'''
{'k1': 'v2', 'k2': '李连杰'}
<class 'dict'>
'''

9. pickle

  • json:优点:所有语言通用,缺点:只能序列化基本的数据类型:list/dict/int
  • pickle:优点:python中所有东西(包括函数)都能被序列化(socket对象),缺点:序列化的内容只能有python认识
  • dumps之后,json得到的是字符串,pickle得到的是字节
import pickle
v1 = {1,2,3}
#序列化
v = pickle.dumps(v1)
print(v)
#反序列化
data = pickle.loads(v)
print(data)

'''
b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03e\x85q\x02Rq\x03.'
{1, 2, 3}
'''

在这里插入图片描述

with open('x.txt',mode='wb') as f:
    res = pickle.dump(v1 , f)
    print(res)

with open('x.txt',mode='rb') as f:
    res = pickle.load(f)
    print(res)

在这里插入图片描述

二、第三方模块

终端中(cmd)

pip install xxx

安装过程中的问题

  1. 网络慢
    在这里插入图片描述
  2. pip需要重新安装
    在这里插入图片描述
    python -m pip install --upgrade pip
    在这里插入图片描述
  3. 安装完成后,导入不成功,则重启pycharm,否则就是安装错了

三、自定义模块

在这里插入图片描述
当字定义模块的时候,如果定义一个文件夹,py2一定要定义一个__init.py__,py3可以不需要,但是一般的包都有这个文件。

1. 模块调用

# folder_test文件夹下的user
def func1():
    print(123)

def func2():
    print(345)

print('qwer')
# 导入此模块,加载次模块中的所有值到内存
import folder_test.user as fu
fu.func1()
print('===============')
fu.func2()


from folder_test.user import func1,func2
func1()
#导入所有模块
from folder_test.user import * 

在导入模块的时候注意该模块可能与调用文件里边的函数重名,这个时候一般在导入模块的时候,将该模块重命名

小结:

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

2.包的调用

在这里插入图片描述
由于函数可以调用该函数所在目录下的其他模块,所以这里虽然标红,但是仍然可以正常运行
在这里插入图片描述在这里插入图片描述
此处导入x模块,没有报错,是因为pycharm默认导入此模块所在的根目录。
如果改变根目录,则会报错
在这里插入图片描述

import client
import sys
import os
path = os.path.dirname(os.path.abspath(__file__))
path = os.path.dirname(path)
sys.path.append(path)
import x
client.c_fun1()
x.x_func()

如果想要导入lib文件夹的jd.py函数,则做以下操作
在这里插入图片描述

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import lib.jd as jd
jd.shopping()

写项目的文件夹一般为两类
在这里插入图片描述

  • 若可执行的脚本有多个,则建立如左端的那种结构
  • 若可执行的脚本只有一个,则建立如右端的那种结构

4.异常处理

可以放在任何地方

try :
    val = input('请输入数字')
    num = int(val)
    print(num)
except Exception as e:
    print('操作异常')
def func(a):
    try :
        print(a.strip())
        return a.strip()
    except Exception as e :
        print('异常')

    return False

func([123,34])
func('  ee  ee')

练习题:

import requests

def func(url_list):
    res = []
    for url in url_list:
        try :
            response = requests.get(url)
            res.append(response)
        except Exception as e:
            pass

    return res

func(['http://www.baidu.com','http://www.google.com'])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值