day 17 包、模块time、datetime、os、sys、json、pickle、hashlib、hmac、logging

  包

假设一个m1.py模块中有60个函数,60个函数再分成多个py文件

导入方式变换了
from m1 import f1

对于使用包的人,累死了
from m2 import f1
from m3 import f6

出现了包,把一个模块分成多个文件,但可以保持同样的导入方式。用了包之后还是from m1 import f1, 使用者感觉不到变化
包其实是一个文件夹(必须得含有__init__.py这个文件)

init让普通的文件夹成为一个包, **导包就是导__init__.py**


第一种使用方式(不建议)
from m1.m2 import f1

第二种使用方式
from m1 import f1
导包就是导入init,运行init这个文件,创建一个init这个名称空间,然后把inti内的变量丢入 init 这个名称空间内
包的文件以执行文件的环境变量为基准,包的init只能从包名开始导入

相对导入:(只能在包中使用)
.是当前目录
..是父目录

from .m2 import f5


time模块

time模块: 支持三种不同形式的时间,不同形式的时间之间可以转换

import time

时间戳
print(time.time()) # 1565922341.6068554

格式化时间
print(time.strftime('%Y_%m_%d %X')) # 2019_08_16 10:26:36

# 结构化时间
print(time.localtime()) # 当地时间(中国)
print(time.gmtime()) # 标准时间

# 三种格式时间的转换(没必要记)

# 结构化时间转格式化时间
print(time.strftime('%Y-%m-%d %X', time.localtime()))
# 格式化时间转结构化时间
print(time.strptime('2019-08-16 10:30:44', '%Y-%m-%d %X'))

# 结构化时间转时间戳
print(time.mktime(time.localtime()))
# 时间戳转结构化时间
print(time.localtime(time.time()))

# 重点
time.time()
time.sleep(2)


datetime模块
datetime模块:时间的修改

import datetime
print(datetime.datetime.now()) # 打印时间

now = datetime.datetime.now()
print(now+datetime.timedelta(3)) # 默认+3天
print(now+datetime.timedelta(hours=3)) # 3小时
print(now+datetime.timedelta(minutes=3)) # 3分钟
print(now.replace(year=1900)) #年份改成1900

os模块
os模块:与操作系统交互,可以操控文件

import os
print(os.getcwd()) # 获取当前文件目录

os.mkdir('m2') # 创建一个文件夹
os.rmdir('m2') # 删除文件夹

*************(经常用到)
res = os.listdir(r'D:\上海Python11期视频\python11期视频\day 17') # 列出所有文件
print(res)

os.rename('test.py','test1.py') #重命名
os.remove('test1.py')       #删除文件


# __file__只有pychamr才提供,python本身不支持
print('os.path.abspath(__file__):',os.path.abspath(__file__)) # 支持不同的平台(windows,ios,andirod,linux,unix)

print('__file__:',__file__)

print(os.path.exists('01 包.py')) # 文件不存在False,存在True


print(os.path.isfile('01 包.py')) # 是否为文件
print(os.path.isdir('01 包.py')) # 是否为文件夹


# ********(经常使用)
# 支持不同的平台(windows,ios,andirod,linux,unix)
res = os.path.join(r'D:\上海Python11期视频\python11期视频\day 17\m1\bbb','m5.py') # 拼接文件路径
res = os.path.join(r'D:\上海Python11期视频\python11期视频\day 17\m1\bbb','m5','test.py') # 拼接文件路径
# print(r'D:\上海Python11期视频\python11期视频\day 17\m1\bb'+'\m5.py')
print(res)

# ******* (经常使用)
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #返回父目录的路径


g = os.walk(r'D:\上海Python11期视频\python11期视频\day 17') # 返回三个值,第一个值是路径;第二个值是路径下的文件夹,第三个值是路径下的文件
for i in g:
print(i)
应用:
计算代码函数(给出文件夹路径,计算文件夹下所有py文件的路径;给出py文件,计算py文件的代码行数)


sys模块
sys模块: 与Python解释器交互

import sys
print(sys.path) #列出当前目录,以及环境变量

print(sys.argv) # 接收参数(用cmd执行文件时运行才有效)

print(sys.modules) #展示所有已导入模块

json模块

json模块:用python写了一个程序,用java写了一门程序,这两个程序需要数据之间交流,规定了一种多种语言通用的数据类型,json串

序列化:从python的字典(最常用)变成json串, dump

反序列化:从json串变成python的字典(最常用),load
注意:无论数据是怎样创建的,只要满足json格式(如果是字典,则字典内元素都是双引号),就可以json.loads出来,不一定非要dumps的数据才能loads
Json类型Python类型
{}dict
[]list
"string"str
520.13int或float
true/falseTrue/False
nullNone








import json

dic = {'a': 1, 'b': 'abc', 'c': None}
data = json.dumps(dic) # 序列化到内存中
print(data,type(data)) # 单引号全部变成双引号 str
data = json.loads(data) # 从内存中获取json串
print(data,type(data)) # dict

with open('test.json','w',encoding='utf8') as fw:
  json.dump(dic,fw)

with open(f'{"test"}.json','r',encoding='utf8') as fr:
data = json.load(fr)
print(data)

pickle模块
pickle: 可以序列化python中所有对象(数据类型),但是无法跨平台

import pickle
import pickle
dic = {'a': 1, 'b': 'abc', 'c': None}
data = pickle.dumps(dic)
print(data,type(data)) # 二进制
data = pickle.loads(data)
print(data,type(data)) # dict

dic = {'a': 1, 'b': 'abc', 'c': None}
def func():
x = 3
print(x)

with open('test.pkl','wb') as fw:
  pickle.dump(func,fw)

with open('test.pkl', 'rb') as fr:
data = pickle.load(fr)
data()
print(data)

hashlib模块
# 密码加密:无论你丢什么字符串,他都会返回一串 固定长度的字符串

import hashlib

m = hashlib.md5() # 固定的写法
m.update(b'123456')
m.update(b'123')
m.update(b'456')
print(m.hexdigest())

# 123 456 --》 e10adc3949ba59abbe56e057f20f883e
# 123456 --》 e10adc3949ba59abbe56e057f20f883e

1. 变成固定的字符串
2. 相同的字符串哈希后结果一样
3. 叠加性

hmac模块
# hmac模块:对密码加密,可以加盐

import hmac

m = hmac.new(b'abc') # 加盐
m.update(b'123456')
m.update(b'456')
print(m.hexdigest())

# abc 123 456 --> 8c7498982f41b93eb0ce8216b48ba21d
# abc 123456 --> 8c7498982f41b93eb0ce8216b48ba21d

1. 变成固定的字符串
2. 相同的字符串哈希后结果一样
3. 叠加性
4.以上实在加同样‘盐’的情况下,改‘盐’结果也会不一样


loggin模块
logging --》日志 # 参考nick博客

import logging

logging.debug('调试') # 10
logging.info('正常') # 20 # 用这一个
logging.critical('严重错误') # 30
logging.error('错误') # 40
logging.warning('警告') # 50
默认30以上的可以输出




 

转载于:https://www.cnblogs.com/wwei4332/p/11366022.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供一些使用常用标准库的 Python 示例代码。以下是一个简单的例子: ```python import sys import os import math import random import pickle import subprocess import queue from io import StringIO import logging import json import time import datetime import re import csv import threading import asyncio # 示例:使用random库生成一个随机数 random_number = random.randint(1, 100) print("随机数:", random_number) # 示例:使用os库获取当前工作目录 current_dir = os.getcwd() print("当前工作目录:", current_dir) # 示例:使用datetime库获取当前时间 current_time = datetime.datetime.now() print("当前时间:", current_time) # 示例:使用re库进行正则表达式匹配 pattern = r'\d+' text = 'Hello 123 World' matches = re.findall(pattern, text) print("匹配结果:", matches) # 示例:使用json库将字典对象转换为JSON字符串 data = {'name': 'John', 'age': 30, 'city': 'New York'} json_str = json.dumps(data) print("JSON字符串:", json_str) # 示例:使用threading库创建并启动一个线程 def print_message(message): print("线程消息:", message) thread = threading.Thread(target=print_message, args=("Hello from thread",)) thread.start() thread.join() # 示例:使用asyncio库创建一个协程并运行 async def print_message_async(message): print("异步消息:", message) loop = asyncio.get_event_loop() loop.run_until_complete(print_message_async("Hello from async")) loop.close() ``` 这些示例展示了如何使用常用的 Python 标准库进行不同的操作,括生成随机数、获取当前工作目录、处理时间和日期、正则表达式匹配、JSON序列化等。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值