Python学习day17-常用的一些模块
Python学习day17-常用的一些模块
包的概念
包其实就是模块的一种形式,包的本质就是一个含有.py文件的文件夹,其标志性文件就是__init__.py
,也就是说文件夹下面有这个文件的就可以称之为包。包解决的就是分文件的问题,也就是说如果原来一个模块文件里有六十个函数,现在想把这六十个分开,分到两个或者更多的模块文件里去,那么就需要包这个概念,既不改变原本执行文件的调用模式,又不影响原执行文件的运行。
使用包的时候需要注意的几点是:
- 包内的所有文件都是被导入使用的,而不是被直接运行的
- 包内模块之间的导入可以使用绝对导入与相对导入两种导入模式
- 当该文件是执行文件时,不能用相对导入的语法,只有文件是被当做模块导入的时候才可以使用相对导入的语法来导入包
- 凡是在导入时带.的,也就是存在相对导入的情况下,点的左边都必须是一个包,也就是一个文件夹,不能是一个文件
关于__init__
的几点说明
- 包的根目录下一定有一个
__init__
,其内容默认为空,他就是包里面最明显也是唯一的标识,实际上导入包就是导入的__init__
,而且导入包一定要以执行文件的环境变量为准,不是模块的环境变量,在__init__
里面导入包体内的模块时要注意从包名开始导入。 __init__
的另一个作用就是定义package中的__all__
,也就是模糊导入。- 不推荐在
__init__
里写过多代码,一般只在里面写需要导入的包里的一些函数和模块即可,不写实际性代码。
- 下面的这些模块只需知道模块的大概功能即可,不必非要熟悉到每一个模块的每个内置方法,需要时查询即可。
time模块
time模块主要是支持三种不同格式的时间之间互相转换
分别是,时间戳,格式化时间,结构化时间。
时间戳timesmap
print(time.time())
格式化时间format time
print(time.strftime('%Y-%m-%d %X'))
结构化时间struce time
print(time.localtime())
当地时间
print(time.gmtime())
标准时间
time模块里最重要的是两个方法
time.time()
返回当前的时间戳,即显示现在距离1970纪元后经过的浮点秒数
time.sleep()
休眠时间,也就是在这几秒内不执行任何程序,用来做某些延时,和一些动画效果比较好
datetime模块
通常用来做时间的修改,即我们可以通过这个模块直接修改当前时间,包括年月日和时分秒。
比如
x
import datetime
print(datetime.datetime.now())#显示当前时间
now = datetime.datetime.now()
print(now + datetime.timedelta(3)) # 默认加三天
print(now + datetime.timedelta(hours=3)) # 默认加三小时
print(now + datetime.timedelta(minutes=3)) # 默认加三小时
print(now.replace(year=1900))# 设定当前年份为1900年
os模块
os模块的主要功能是与操作系统交互,可以直接操控文件。
xxxxxxxxxx
import os
print(os.getcwd())# 获取当前文件目录
os.mkdir('file1')# 创建一个文件夹
os.rmdir('file1')# 删除指定文件夹
os.listdir()# 列出当前文件夹里的文件名,括号里最好放绝对路径,
os.rename()# 重命名
os.remove()# 删除指定文件
print(os.path.abspath())# 获取当前文件的绝对路径,以后要常用这个,因为其支持跨平台使用,兼容性较好,其获得的文件路径兼容于多个平台
print(os.path.exists())# 判断文件是否存在,不存在返回false,存在则返回true
print(os.path.isfile())# 判断是否是文件,返回值是true ,false
print(os.path.isdir())# 判断是否是文件夹,返回值依然是true和false
# ************比较重要和常用的功能
res = os.path.join(r'D:\prog\','11.py')# 拼接文件路径
res = os.path.join(r'D:\prog\','11.py','22.py')#可以同时拼接多个个文件的路径
os.path.dirname(os.path.abspath(__file__))# 查询文件夹名称
print(os.walk('文件路径'))#遍历当前文件夹所有的文件名,包括文件里里的所有子文件夹,
sys模块
sys模块的主要功能是与python解释器交互
xxxxxxxxxx
import sys
print(sys.argv)#接收参数,但只能在cmd使用python执行文件时运行,参数之间要用空格隔开,所以如果文件所在路径有空格的话要修改一下文件夹的名称
print(sys.modules)#获取当前文件夹下的模块,及其路径
json模块
不同的语言所写的程序之间如果需要数据交互的话,就需要规定一种多重语言通用的数据类型,也就是json串。所以json模块可以把python的字典变成jaon串,同样可以把json串变成python的字典。因为字典类型是最常用也是功能最全数据类型,所以用字典来做转换,所以以后要注意这个。
xxxxxxxxxx
import json
dic = {'a':1,'b':2,'c':None}
data = json.dumps(dic)# 可以序列化到内存中
print(data)# 单引号全部变成了双引号
data = json.loads(data)# 从内存中获取json串,并将其转成python字典的格式
print(data)
with open('test.json','w',encoding = 'utf8')as fw:
json.dump(dic,fw)
with open('test.json','r',encoding = 'utf8')as fr:
data = json.load(fr)
print(data)
需要注意的是json.dump
后面加的是文件,和写入内容,而json.dumps
后面加的是文件,也就是需要序列化的东西。
pickle模块
可以序列化python中的所有对象,数据类型,但是无法跨平台。
xxxxxxxxxx
dic = {'a':1,'b':'abc','c':None}
def func():
x = 3
def wrapper():
print(x)
return wrapper
import pickle
with open('test.pkl', 'wb')as fw:# 其实保存的只是一个函数名,并没有函数值,没有太大意义,因为并不能在别的文件里导入并调用这个函数,还是需要在需要调用该函数的文件的上面写入该函数。
pickle.dump(func, fw)
with open('test.pkl', 'rb')as fr:
data = pickle.load(fr)
print(data)
wrapper = data()
wrapper()
hashlib模块
主要起到密码加密的作用,但是是在以前的时候,现在的密码加密都比这个做的要高级,不过还是需要了解一下。
x
import hashlib
m = hashlib.md5()
m.update(b'hello')
print(m.hexdigest()) # 返回值长度都一样
m.update(b'123')
m.update(b'1 2 3')
m.update(b'567') # 相同字符串哈希值总是相同的
# 1. 相同字符串哈希后结果一样,即便字符串中有空格也一样
# 2. 叠加性
hmac模块
也是对密码加密,不过hmac模块可以双重加密,比hashlib稍微好一点。
xxxxxxxxxx
import hmac
m = hmac.new(b'abc')# 这里的abc起到一个双重加密的作用,也就是秘钥的意思,只有这个对了,下面的密码才有意义,才可以被检测是否正确。
m.update(b'123')
m.update(b'456')
print(m.hexdigest())
# a 123456
# 123456
原文地址:https://www.cnblogs.com/Xu-PR/p/11365949.html
- NET中解决KafKa多线程发送多主题的问题
- mysql数据与Hadoop之间导入导出之Sqoop实例
- 如何将mysql数据导入Hadoop之Sqoop安装
- 常见的几种Flume日志收集场景实战
- 教你一步搭建Flume分布式日志系统
- 几十条业务线日志系统如何收集处理?
- 0基础搭建Hadoop大数据处理-编程
- 0基础搭建Hadoop大数据处理-集群安装
- Validation of viewstate MAC failed 解决办法
- springmvc注入类 NoUniqueBeanDefinitionException: No qualifying bean of type [] is defined: expected sin
- springmvc注入类 NoUniqueBeanDefinitionException: No qualifying bean of type [] is defined: expected sin
- idea启动多个tomcat失败
- Log4Net 生成多个文件、文件名累加解决方法
- 【C#|.NET】lock(this)其实是个坑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 07 Confluent_Kafka权威指南 第七章: 构建数据管道
- java中的reference(二): jdk1.8中Reference的源码阅读
- 08 Confluent_Kafka权威指南 第八章:跨集群数据镜像
- java的reference(五): WeakReference的应用之二--InheritableThreadLocal源码分析
- rabbitmq-3.7.7安装过程
- 09 Confluent_Kafka权威指南 第九章:管理kafka集群
- 关于禁止使用Executors创建线程池的分析
- ArrayList源码分析(基于jdk1.8)(一):源码及基本操作
- ArrayList源码分析(基于jdk1.8)(二):subList陷阱
- 【每日一题】31. Next Permutation
- 关于聚合和多线程的处理套路
- Jboss漏洞利用总结
- 二次注入——sqli-labs第24关
- OCMock 源码分析
- MessageMock : 优雅的模拟 Objective-C 方法