Python中的模块
2018-09-07 17:33:08 1 举报
AI智能生成
Python模块
作者其他创作
大纲/内容
time 时间模块
常用方法
<p>1、time.sleep(secs)</p><p>(线程)推迟指定的时间运行。单位为秒。</p>
<p>2、time.time()</p><p>获取当前时间戳</p>
表示时间的三种方式
时间戳(timestamp)
通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
元组(struct_time)
struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
https://www.cnblogs.com/heshun/p/9507614.html<br>
格式化的时间字符串(Format String)
https://www.cnblogs.com/heshun/p/9507614.html<br>
小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
<span style="font-size: 16px;">hashlib模块</span>
摘要算法
摘要算法
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。(摘要函数是一个单向函数)
应用
加盐
动态加盐:把登录名作为Salt的一部分来计算MD5
<span style="font-size: 16px;">configparser模块</span>
适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。
用于处理特定格式的文件,其本质上是利用open来操作文件。
详见博客
random 随机数模块
random.random()
生成一个0到1的随机符点数: 0 <= n < 1.0
random.uniform(a, b)
用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。
random.randint(a, b)
生成一个指定范围内的整数。其中参数a是下限,参数b是上限。
random.randrange([start], stop[, step])
从指定范围内,按指定基数递增的集合中 获取一个随机数,是整数。
random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。
random.choice(sequence)
从序列中获取一个随机元素,参数sequence表示一个有序类型。sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。
random.shuffle(x[, random])
用于将一个列表中的元素打乱
random.sample(sequence, k)
从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
sys模块
<span style="color: rgb(0, 0, 0); font-size: 14px;"><span style='font-family: "Helvetica Neue";'>sys模块是与<span class="s1">python解释器交互的一个接口</span></span></span>
https://www.cnblogs.com/heshun/p/9507614.html<br>
什么是模块
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
import加载的模块分为四个通用类别
1 使用python编写的代码(.py文件)
2 已被编译为共享库或DLL的C或C++扩展
3 包好一组模块的包
4 使用C编写并链接到python解释器的内置模块
为何要使用模块?
模块的使用
示例文件:自定义模块my_module.py,文件名my_module.py,模块名my_module
具体步骤详见博客
首次导入模块my_module时会做三件事
<span style="color: rgb(0, 0, 255);">1.为源文件(my_module模块)创建新的名称空间,在my_module中定义的函数和方法若是使用到了global时访问的就是这个名称空间。</span>
<span style="color: rgb(0, 0, 255);">2.在新创建的命名空间中执行模块中包含的代码,见初始导入import my_module</span>
<span style="color: rgb(0, 0, 255);">3.创建名字my_module来引用该命名空间</span>
为模块名起别名,相当于m1=1;m2=m1
<p>示范用法一:</p><p>有两中sql模块mysql和oracle,根据用户的输入,选择不同的sql功能</p>
<p>示范用法二: </p><p>为已经导入的模块起别名的方式对编写可扩展的代码很有用,假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,例如</p>
在一行导入多个模块
from ... import...
<p>对比import my_module,会将源文件的名称空间'my_module'带到当前名称空间中,使用时必须是my_module.名字的方式</p><p>而from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了、</p><div class="cnblogs_code"><pre><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 255);">from</span> my_module <span style="color: rgb(0, 0, 255);">import</span> read1,read2<span style="color: rgb(0, 128, 128);"><br></span></pre></div><p>这样在当前位置直接使用read1和read2就好了,执行时,仍然以my_module.py文件全局名称空间</p>
如果当前有重名read1或者read2,那么会有覆盖效果。
<p><span style="line-height: 1.5;">需要特别强调的一点是:python中的变量赋值不是一种存储操作,而只是一种绑定关系,如下:</span></p>
<span style="line-height: 1.5;">也支持as</span>
<span style="line-height: 1.5;">也支持导入多行</span>
<span style="line-height: 1.5;">from my_module import * 把my_module中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。</span>
模块搜索路径
<strong><font color="#ff0000">模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块</font></strong>
<font color="#ff0000">特别注意的是:我们自定义的模块名不应该与系统内置模块重名。</font>
详见博客
dir()函数
内建函数dir是用来查找模块中定义的名字,返回一个有序字符串列表
<p>如果没有参数,dir()列举出当前定义的名字</p><p><br>dir()不会列举出内建函数或者变量的名字,它们都被定义到了标准模块builtin中,可以列举出它们,</p>
re模块
<span style="font-size: 15px;"><strong>正则表达式</strong></span>
<p>正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。</p><p>首先,正则只和字符串有关。在线测试工具 http://tool.chinaz.com/regex/</p>
给定一个正则表达式和另一个字符串,我们可以达到如下的目的
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配");
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点
1. 灵活性、逻辑性和功能性非常强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
具体符号解析
https://www.cnblogs.com/heshun/p/9488983.html<br>
在Python中正则表达式的实现形式
调用模块指令
<span style="color: rgb(0, 0, 255);">import</span> re
常用关键字汇总
<span style="font-size: 16px;"><strong>findall </strong></span>
re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
<span style="font-size: 16px;">格式:re.findall(‘前面放要查找的内容’,‘这里放被查找的内容’)</span>
<span style="font-size: 16px;"><strong>search</strong></span>
re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。返回的变量需要调用group才能拿到结果 ,如果没有找到,那么返回None,调用group会报错。
<span style="font-size: 16px;">格式:re.search(‘前面放要查找的内容’,‘这里放被查找的内容’) </span>
<strong>match</strong>
决定RE是否在字符串刚开始的位置匹配。//注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。<p><span style="font-size: 16px;">想要完全匹配,可以在表达式末尾加上边界匹配符'$'。</span></p><p><span style="color: rgb(0, 0, 0);">match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量。 匹配的内容需要用group才能显示 。 如果没匹配上,就返回None,调用group会报错。</span></p>
<span style="color: rgb(0, 0, 0);">格式:</span> re.match(‘前面放要查找的内容’,‘这里放被查找的内容’)
<span style="color: rgb(0, 0, 0);"><strong>compile</strong></span>
只会从开头匹配,如果不是开头的字符串,那么将不会匹配成功。<strong>将正则表达式编译成为一个 正则表达式对象。</strong>
re.<span style="color: rgb(0, 0, 0);">compile</span>
<span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);"><strong>search</strong></span></span>
<span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。</span></span>
re.search(pattern, string, flags=0)
<span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);"><strong>finditer</strong></span></span>
<span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。</span></span>
re.finditer(pattern, string, flags=0)
<span style="color: rgb(0, 0, 0);"><strong>split </strong></span>
按照能够匹配的子串将string分割后返回列表。可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。
re.split(pattern, string[, maxsplit])
<span style="color: rgb(0, 0, 0);"><strong>sub</strong></span>
使用re替换string中每一个匹配的子串后返回替换后的字符串。<p>re.sub还允许使用函数对匹配项的替换进行复杂的处理。</p><p>如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。</p>
re.sub(pattern, repl, string, count)
<strong> subn</strong>
返回替换次数。
re.subn(pattern, repl, string, count=0, flags=0)
注意事项
<strong>1、re.match与re.search与re.findall的区别</strong>
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配;findall是匹配整个字符串,匹配所有符合条件的。
<strong>2、贪婪匹配与非贪婪匹配</strong>
*?,+?,??,{m,n}? 前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配
<span style="font-size: 16px;">logging模块</span>
日志模块
典型的日志记录的步骤是这样的:
1、创建logger
2、创建handler
3、定义formatter
4、给handler添加formatter
5、给logger添加handler
collections模块
namedtuple
生成可以使用名字来访问元素内容的tuple
deque
双端队列,可以快速的从另外一侧追加和推出对象
Counter
计数器,主要用来计数
OrderedDict
有序字典
defaultdict
带有默认值的字典
os模块
os模块是与操作系统交互<span style="font-size: 14px;">的一个接口</span>
https://www.cnblogs.com/heshun/p/9507614.html
序列化模块
将原本的字典、列表等内容转换成一个字符串的过程就叫做<span style="font-size: 16px;"><strong>序列化</strong>。</span>
序列化的目的
以某种存储形式使自定义<a href="https://baike.baidu.com/item/%E5%AF%B9%E8%B1%A1%E6%8C%81%E4%B9%85%E5%8C%96" target="_blank">对象持久化</a>
将对象从一个地方传递到另一个地方
使程序更具维护性
具体应用
<span style="font-size: 15px;"><strong>json模块</strong></span>
通用的序列化格式,只有很少的一部分数据类型能够通过json转化成字符串(<font color="#008000">数字 字符串 列表 字典 元组</font>)<br>
包含四个模块
<font size="3">dumps</font>
<span style="color: rgb(0, 128, 0);">序列化:将一个字典转换成一个字符串</span><br>
<font size="3">dump</font>
<font color="#008000">接收一个文件句柄,直接将字典转换成json字符串写入文件</font><br>
<font size="3">loads</font>
<span style="color: rgb(0, 128, 0);">反序列化:将一个字符串格式的字典转换成一个字典</span><span style="color: rgb(0, 128, 0);">
</span>
<font size="3">load</font>
<font color="#008000">接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回</font><br>
<span style="font-size: 15px;"><strong>json也有格式化功能</strong></span>
<span style="font-size: 15px;"><strong>pickle模块</strong></span>
所有的python中的数据类型都可以转化成字符串形式, pickle序列化的内容只有python能理解,且部分反序列化依赖python代码<br><br>
用法和 json 一样
dumps
dump(序列化,存)
loads(反序列化,读)
load (不仅可以序列化字典,列表...可以把Python中的任意数据类型序列化)
<span style="font-size: 15px;"><strong>shelve模块</strong></span>
Python3系列新增模块。序列化句柄,使用句柄直接操作,非常方便
<span style="font-size: 15px;">shelve也是python提供给我们的序列化工具,比pickle用起来更简单一些。<br>shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。</span>
包
包是一种通过使用‘.模块名’来组织python模块名称空间的方式。
注意事项
<br>
import
from.....import...
<h3>__init__.py文件</h3>
绝对导入和相对导入
绝对导入
指跳过包内,直接搜索 sys.path ,在sys.path的基础上进行我们的模块搜索
一个模块只能导入自身的子模块或和它的顶层模块同级别的模块及其子模块
相对导入
指先包内,再包外
一个模块必须有包结构且只能导入它的顶层模块内部的模块
<strong>相对与绝对仅针对包内导入而言</strong>
shutil模块
shutil.move
更名\如果同名就删除源文件再更名
hutil.rmtree
删除文件
0 条评论
下一页