python 3.5学习笔记(第五章)
本章内容
1、什么是模块
2、模块的导入方法
3、搜索路径
4、重要标准库
一、什么是模块
1、模块本质上是一个以.py 结尾的python文件,包含了python对象定义和python语句。
2、模块是用来从逻辑上组织python代码(定义变量、函数、类、逻辑等)以实现某种功能
3、包:包含多个模块的文件夹(包中要有一个__init__.py的文件,文件内容可以是空的)
二、导入模块
1、完全导入
import 模块1[, 模块2[,... 模块N]
from 包名 import 模块名
import test 相当于把test中的所有代码都赋值给了test这个变量
注:
(1)建议每一个模块都单独导入便于阅读
(2)也可以使用 from module_name import * 来导入模块中的所有功能,但是不建议这样做
(3)如果模块名字太长,导入后调用会不方便,可以使用下面的方法
import 原模块名 as 新模块名
(4)一个模块只能被导入一次
2、部分导入
from 模块名 import 方法名
3、导入包
import 包名
#只执行init文件中的code
import 包名.模块名
#既执行init文件中的code,也会执行导入的模块中的code
小结:
1、导入模块的本质是把python文件执行一遍
2、导入包的本质是执行包下的__init__.py 文件
三、搜索路径
import module_name-->module_name.py-->module_name.py的路径-->sys.path-->在当前目录下寻找-
->找父集目录【os模块-->os.path.dirname(os.path.abspath(__file__))】
当导入一个模块的时候,python解释器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3、如果都找不到,Python会察看默认路径。
四、重要标准库
1、time标准库
1)time模块中时间的表示方法有三种:
a、 timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
b、struct_time时间元组,共有九个元素组 。
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=20, tm_min=20, tm_sec=45, tm_wday=6, tm_yday=140, tm_isdst=0)
2018
c、format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。(如:年-月-日-时- 分-秒)
2)time模块中的内置方法
a、time()
——return current time in seconds since the Epoch as a float
#获取时间戳(秒)
import time
a = time.time()
print(a)
》1526822821.9055681
3)sleep()
——delay for a number of seconds given as a float 、
#程序休眠
import time
time.sleep(3)
print("休眠3s")
4)gmtime()
—— convert seconds since Epoch to UTC tuple
#把时间戳转换为struct_time的格式,默认对当前时间进行转换,转换结果是utc时区的时间
import time
a = time.gmtime()
print(a)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=31, tm_sec=24, tm_wday=6, tm_yday=140, tm_isdst=0)
5)localtime()
——convert seconds since Epoch to local time tuple
#把时间戳转换为struct_time的格式,默认对当前时间进行转换,转换结果是本地时区的时间
import time
a = time.localtime()
print(a)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=33, tm_sec=1, tm_wday=6, tm_yday=140, tm_isdst=0)
注意:mgtime() 和 loacltime() 之间相差8个小时。
6)asctime()
—— convert time tuple to string
#接收的变量是元组
import time
a = time.localtime()
b = time.asctime(a)
print(a)
print(b)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=38, tm_sec=4, tm_wday=6, tm_yday=140, tm_isdst=0)
》Sun May 20 21:38:04 2018
7)ctime()
—— convert time in seconds to string
#接收的变量是时间戳
import time
a = time.time()
b = time.ctime(a)
print(a)
print(b)
》1526823558.3019936
》Sun May 20 21:39:18 2018
8)mktime()
——convert local time tuple to seconds since Epoch
#把struct_time转换为时间戳的形式
import time
a = time.localtime()
b = time.mktime(a)
print(a)
print(b)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=40, tm_sec=33, tm_wday=6, tm_yday=140, tm_isdst=0)
》1526823633.0
9)strftime()
——convert time tuple to string according to format specification
#把元组格式的时间转换为格式化的字符串格式的时间
import time
a = time.localtime()
b = time.strftime("%Y-%m-%d %H:%M:%S",a)
print(a)
print(b)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=45, tm_sec=7, tm_wday=6, tm_yday=140, tm_isdst=0)
》2018-05-20 21:45:07
10)strptime()
——parse string to time tuple according to format specification
#把格式化的字符串格式的时间转换为元组格式的时间
import time
a = time.localtime()
b = time.strftime("%Y-%m-%d %H:%M:%S",a)
c = time.strptime(b,"%Y-%m-%d %H:%M:%S")
print(a)
print(b)
print(c)
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=47, tm_sec=17, tm_wday=6, tm_yday=140, tm_isdst=0)
》2018-05-20 21:47:17
》time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=21, tm_min=47, tm_sec=17, tm_wday=6, tm_yday=140, tm_isdst=-1)
2、datatime标准库
1)datetime.datetime.now()
——当前时间
import datetime
print(datetime.datetime.now()) #当前时间
》2018-05-20 21:53:21.906109
2)replace()
——修改当前时间
import datetime
a_time = datetime.datetime.now()
print(a_time)
b_time = a_time.replace(year=1,month=1,day=1,minute=0,hour=0,second=0)
print(b_time)
》2018-05-20 21:55:57.781579
》0001-01-01 00:00:00.781579
3)timedelta()
——时间延迟
import datetime
print("当前时间:",datetime.datetime.now())
print(datetime.datetime.now()+datetime.timedelta(3)) #当前时间加三天
print(datetime.datetime.now()+datetime.timedelta(-3)) #当前时间减三天
print(datetime.datetime.now()+datetime.timedelta(hours=3)) #当前时间加三个小时
print(datetime.datetime.now()+datetime.timedelta(hours=-3)) #当前时间减三个小时
print(datetime.datetime.now()+datetime.timedelta(minutes=30)) #当前时间加30分钟
》当前时间: 2018-05-20 21:59:19.389405
》2018-05-23 21:59:19.389405
》2018-05-17 21:59:19.389405
》2018-05-21 00:59:19.389405
》2018-05-20 18:59:19.389405
》2018-05-20 22:29:19.389405
3、random标准库
1)随机取浮点数
(a)不指定随机区间
import random
print(random.random())
》0.23569079391833148
(b)指定随机区间
import random
print(random.uniform(1,10))
>>>6.12050957632076
#包括1和10
2)随机取整数
import random
print(random.randint(1,3))
#包括1和3
print(random.randrange(1,3))
#包括1但是不包括3
3)传入参数,然后在参数中随机取出内容
(a)从传入的参数中随机取一个值
import random
print(random.choice("sfbuewahelih"))
》f
(b)从传入的内容中随机取n位
import random
print(random.sample("nioasfgje9gh",3))
#取3位,结果以列表的形式呈现并且是序的
》['s', 'n', 'a']
4)打乱顺序
import random
items = [1,2,3,4,5]
print(items)
random.shuffle(items)
print(items)
>>>[1, 2, 3, 4, 5]
[2, 4, 5, 1, 3]
5)利用random模块实现一个简单的验证码功能
import random checkcode = '' for i in range(5):
current = random.randint(0,5)
if current == i:
tmp = chr(random.randint(65,90))
else:
tmp = random.randint(0,9) checkcode += str(tmp) print(checkcode)
4、os模块
提供对操作系统进行调用的接口
1)os.getcwd() :获取当前工作目录,即当前py脚本工作的目录路径
2)os.chdir("dirname") :改变当前脚本的工作目录,相当于shell下的cd
3)os.curdir :返回当前目录
4)os.pardir : 获取当前目录的父目录字符串名
5)os.makedirs("dirname1/dirname2") : 可生成多层递归目录
6)os.removedirs("dirname1") : 若目录为空,则删除,并递归到上一级目录,如果仍然为空,则继续删除,以此类推
7)os.mkdir("dirname") : 生成单级目录,相当于shell中的mkdir dirname
8)os.rmdir("dirname") : 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中的rmdir dirname
9)os.listdir("dirname") : 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表的方式打印
10)os.remove() : 删除一个文件
11)os.rename("oldname","newname") :重命名文件/目录
12)os.stat("path/filename") :获取文件/目录信息
13)os.sep :输出操作系统特定的路径分隔符,win下为“\\” , Linux 下为“/”
14)os.linesep :输出当前平台使用的行终止符(换行符),win下为“\t\n” , Linux 下为“\n”
15)os.pathsep : 输出用于分割文件路径的字符串
16)os.name : 输出字符串指示当前使用平台。 win->"nt", Linux->"posix"
17)os.system("bash command") :运行shell命令,直接显示
18)os.environ :获取系统环境变量
19)os.path.abspath(path) : 返回path规范化的绝对路径
20)os.path.split(path) : 将path分割成目录和文件名二元组返回
21)os.path.dirname(path) : 返回path的目录。其实就是os.path.split(path)的第一个元素
22)os.path.basename(path) : 返回path最后的文件名。如果path以 / 或 \ 结尾,那么就会返回空值。
23)os.path.exists(path) : 如果path存在,返回True
24)os.path.isabs(path) : 如果path是绝对路径,返回True
25)os.path.isfile(path) :如果path是一个存在的文件,返回True,否则返回False
26)os.path.isdir(path) :如果path是一个存在的目录,则返回true,否则返回false
27)os.path.join(path1 [,path2 [, ......]]) :将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
28)os.path.getatime(path) :返回path所指向的文件或者目录的最后存取时间
29)os.path.getmtime(path) : 返回path所指向的文件或者目录的最后修改时间
5、sys模块
1) sys.argv : 实现从程序外部向程序传递参数
2) sys.exit([arg]) : 程序中间的退出,arg=0为正常的退出
3) sys.getdefaultencoding() : 获取系统当前编码,一般默认为ascii
4) sys.setdefaultencoding() : 设置系统默认编码,执行dir(sys) 时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys) ,
再执行setdefaultencoding('utf-8'), 此时将系统默认编码设置为utf-8。
5) sys.getfilesystemencoding() : 获取文件系统使用编码方式,windows下返回“mbcs”,mac下返回“utf-8”。
6) sys.path : 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。
7) sys.platform : 获取当前系统平台
6、shutil模块
可以复制(copy),可以压缩(zip)
参考:https://blog.csdn.net/ff_smile/article/details/78081909
7、Configparser模块
参考:https://blog.csdn.net/miner_k/article/details/77857292
8、xml模块
参考:https://www.jb51.net/article/114411.htm
9、shelve模块
参考:https://www.jb51.net/article/118198.htm
10、Hashlib模块
参考:https://blog.csdn.net/seymour163/article/details/53448029
11、Hmac模块
参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0015108777177966ef0f4f8510a41b3b8c48cdcf7047b2d000
12、正则表达式Re模块
基础语法:
1) '.'
默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
2) '^'
匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r
"^a"
,
"\nabc\neee"
,flags
=
re.MULTILINE)
3) '$'
匹配字符结尾,或e.search(
"foo$"
,
"bfoo\nsdfsf"
,flags
=
re.MULTILINE).group()也可以
4) '*'
匹配
*
号前的字符
0
次或多次,re.findall(
"ab*"
,
"cabb3abcbbac"
) 结果为[
'abb'
,
'ab'
,
'a'
]
5) '+'
匹配前一个字符
1
次或多次,re.findall(
"ab+"
,
"ab+cd+abb+bba"
) 结果[
'ab'
,
'abb'
]
6) '?'
匹配前一个字符
1
次或
0
次
7) '{m}'
匹配前一个字符m次
8) '{n,m}'
匹配前一个字符n到m次,re.findall(
"ab{1,3}"
,
"abb abc abbcbbb"
) 结果
'abb'
,
'ab'
,
'abb'
]
9) '|'
匹配|左或|右的字符,re.search(
"abc|ABC"
,
"ABCBabcCD"
).group() 结果
'ABC'
10) '(...)'
分组匹配,re.search(
"(abc){2}a(123|456)c"
,
"abcabca456c"
).group() 结果 abcabca456c
11) '\A'
只从字符开头匹配,re.search(
"\Aabc"
,
"alexabc"
) 是匹配不到的
12) '\Z'
匹配字符结尾,同$
13) '\d'
匹配数字
0
-
9
14) '\D'
匹配非数字
15) '\w'
匹配[A
-
Za
-
z0
-
9
]
16) '\W'
匹配非[A
-
Za
-
z0
-
9
]
17) 's'
匹配空白字符、\t、\n、\r , re.search(
"\s+"
,
"ab\tc1\n3"
).group() 结果
'\t'
18) '(?P<name>...)'
分组匹配 re.search(
"(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})"
,
"371481199306143242"
).groupdict(
"city"
)
结果{
'province'
:
'3714'
,
'city'
:
'81'
,
'birthday'
:
'1993'
}
常用语法:
1) re.match("","") 从头开始匹配
2) re.search("","") 从整个文本中来搜索
3) re.findall("","") findall没有group方法
4) re.split("","") 按照指定内容进行分割
5) re.sub("匹配的内容","指定内容","待匹配项"[, count = n])
将匹配到的内容更换为指定内容,count 表示需要更换的次数,当count=2时,只更换匹配到的前两个
6) ^ 匹配字符的开头
7) \d 匹配一个数字
8) \d+ 匹配一个或多个数字
9) $ 以最后一个要匹配的字符结尾
10) [a-z] 从小写a到小写z
11) [a-zA-Z] 从小写a到大写Z
12) [a-zA-Z0-9] 从小写a到数字9
13) re.search("[a-z]+","adasfAfsaB",flags=re.I)
flags=re.I 表示忽略大小写 flags=re.M 表示多行模式,改变'^'和'$'的行为 flags=re.S 表示点任意匹配模式,改变'.'的行为
python 3.5学习笔记(第五章)的更多相关文章
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像
[HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...
- [Python学习笔记][第五章Python函数设计与使用]
2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...
- 【马克-to-win】学习笔记—— 第五章 异常Exception
第五章 异常Exception [学习笔记] [参考:JDK中文(类 Exception)] java.lang.Object java.lang.Throwable java.lang.Except ...
- 《Spring实战》学习笔记-第五章:构建Spring web应用
之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
- opencv图像处理基础 (《OpenCV编程入门--毛星云》学习笔记一---五章)
#include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgu ...
- 学习笔记 第五章 使用CSS美化网页文本
第五章 使用CSS美化网页文本 学习重点 定义字体类型.大小.颜色等字体样式: 设计文本样式,如对齐.行高.间距等: 能够灵活设计美观.实用的网页正文版式. 5.1 字体样式 5.1.1 定义字体 ...
- [汇编学习笔记][第五章[BX]和loop指令]
第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...
- Linux学习笔记(第五章)
第五章-常用指令 下达指令: 1.[Tab] 2.man + (指令):显示操作说明 开头代号 man page 常用按键
随机推荐
- 如何计算memcache的容量
在容量足够的情况下,当然是越大越好,但这样会造成浪费.不考虑这种情况.我们一般的情况是: memcache集群一开始创建会根据存储的数据量与访问量进行容量大小的估算.再算一个20%的冗余. 在网站快速 ...
- Docker笔记01-发布一个dotnetcore应用
OS:Widows 10 IDE: VS2017 Docker:Docker Desktop for Windows Windows下安装Docker需要先启用Hyper-v 在Windows 容器的 ...
- LockWindowUpdate的函数的用法(不忽略消息,只是暂时不响应,但WM_SETREDRAW根本不接受重绘消息)
Application.ProcessMessages;LockWindowUpdate(Self.Handle); //锁住当前窗口 LockWindowUpdate(0)//解除锁定窗口 Loc ...
- C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的const、volatile以及__unaligned属性去掉)
在C++中,存在类型转换,通常意味着存在缺陷(并非绝对).所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换( ...
- Oracle数据库密码重置、导入导出库命令
重置办法如下:打开CMD命令提示符,然后输入下面命令进行重置: 输入sqlplus /nolog,回车 SQL> conn /as sysdba 已连接: SQL>alter user s ...
- Mysql 自定义HASH索引带来的巨大性能提升
有这样一个业务场景,需要在2个表里比较存在于A表,不存在于B表的数据.表结构如下: T_SETTINGS_BACKUP | CREATE TABLE `T_SETTINGS_BACKUP` ( `FI ...
- hadoop之文件管理基本操作
# 格式化hdfs hadoop namenode -format # 查看hadoop下的文件夹 hadoop fs -ls # 创建hdfs文件夹 hadoop fs -mkdir /user/i ...
- Kali Linux Web渗透测试手册(第二版) - 1.1 - Firefox浏览器下安装一些常用的插件
一.配置KALI Linux和渗透测试环境 在这一章,我们将覆盖以下内容: l 在Windows和Linux上安装VirtualBox l 创建一个Kali Linux虚拟机 l 更新和升级Ka ...
- Spring Framework 组件注册 之 FactoryBean
Spring Framework 组件注册 之 FactoryBean 前言 前两篇文章介绍了如何使用@Component,@Import注解来向spring容器中注册组件(javaBean),本文将 ...
- 08、MySQL—字符串型
字符串型 1.Char 定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据 基本语法: char(L),L代表字符数(中文与英文字母一样),L长度为0到255 2.Varchar 变长字符: ...