第四章节

第四章节

1、什么是模块

2、模块的好处

最大的好处是大大提高了代码的可维护性

使用模块还可以避免函数名和变量名冲突

3、模块的分类

1.标准模块(标准库、内置模块)

有近300个,随时可以调用

2.第三方模块

近18w个左右

需要单独安装  pip install

3.自定义模块

自己写的

模块的导入和调用

import

from os import rename,path,replace

rename()

path()

replace()

模块的导入要写在首行

模块的调用方法:

mport module

from module import xx

from module.xx.xx import xx as rename  

from module.xx.xx import *

自定义模块

模块的查找路径:

全局能导入:

把文件放到第三方模块的路径下,就可以实现全局调用

 

第三方模块的安装和使用

https://pypi.org/

直接pip安装

pip命令会自动下载模块包病完成安装

软件一般会被自动安装你python安装目录的这个字目录里:

/your_python_install_path/3.6/lib/python3.6/site-packages
sudo pip install -i http://pypi.douban.com/simple/ alex_sayhi --trusted-host pypi.douban.com   #alex_sayhi是模块名

OS模块

得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd

>>> os.getcwd()
'C:\\Users\\hanjj20688'
>>>

返回指定目录下的所有文件和目录名:os.listdir()

>>> os.listdir()
['.PyCharm2018.3', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Evernote', 'Favorites', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TM.blf', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'ntuser.pol', 'Pictures', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'Videos', '「开始」菜单']
>>>

获取当前路径下的文件

>>> os.listdir(".")
['.PyCharm2018.3', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Evernote', 'Favorites', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TM.blf', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'ntuser.pol', 'Pictures', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'test', 'test.txt', 'Videos', '「开始」菜单']
>>>

函数用来删除一个文件:os.remove()

>>> os.remove("试验用.txt")
>>> os.remove("那些人.txt")

删除多个目录:os.removedirs(r“c:\python”)

检验给出的路径是否是一个文件:os.path.isfile()

检验给出的路径是否是一个目录:os.path.isdir()

判断是否是绝对路径:os.path.isabs()

检验给出的路径是否真地存:os.path.exists()

返回一个路径的目录名和文件名:os.path.split() e.g os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt') 

分离扩展名:os.path.splitext() e.g os.path.splitext('/usr/local/test.py') 结果:('/usr/local/test', '.py')

获取路径名:os.path.dirname()

获得绝对路径: os.path.abspath()  

打印当前脚本所在的路径,包含文件名【打印的是绝对路径】

import   os
print(__file__)

输出

D:\py\Learning\venv\Scripts\python.exe D:/py/Learning/第四模块/account.json.py
D:/py/Learning/第四模块/account.json.py

获取文件名:os.path.basename()

运行shell命令: os.system()

读取操作系统环境变量HOME的值:os.getenv("HOME") 

返回操作系统所有的环境变量: os.environ 

设置系统环境变量,仅程序运行时有效:os.environ.setdefault('HOME','/home/alex')

给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux and MAC使用'\n'

指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'

重命名:os.rename(old, new)

>>> os.listdir(".")
['.PyCharm2018.3', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Evernote', 'Favorites', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TM.blf', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'ntuser.pol', 'Pictures', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'test', 'test.txt', 'Videos', '「开始」菜单']
>>> os.rename("test.txt","test22.txt")
>>> os.listdir(".")
['.PyCharm2018.3', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Evernote', 'Favorites', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TM.blf', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'ntuser.pol', 'Pictures', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'test', 'test22.txt', 'Videos', '「开始」菜单']

创建多级目录:os.makedirs(r“c:\python\test”)

创建单个目录:os.mkdir(“test”)

获取文件属性:os.stat(file)

>>> os.listdir(".")
['.PyCharm2018.3', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Evernote', 'Favorites', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TM.blf', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{8ebe95f7-3dcb-11e8-a9d9-7cfe90913f50}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'ntuser.pol', 'Pictures', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'test', 'test22.txt', 'Videos', '「开始」菜单']
>>> os.stat("test22.txt")
os.stat_result(st_mode=33206, st_ino=22799473113716506, st_dev=906384342, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1568032366, st_mtime=1568032366, st_ctime=1568032366)
>>>

修改文件权限与时间戳:os.chmod(file)

获取文件大小:os.path.getsize(filename)

结合目录名与文件名:os.path.join(dir,filename)

改变工作目录到dirname: os.chdir(dirname)

获取当前终端的大小: os.get_terminal_size()

杀死进程: os.kill(10884,signal.SIGKILL)

 

 

 

sys模块

 

 

 

time模块

对时间处理,有如下三种操作

时间的显示

时间的转换

时间的运算

通常有这几种方式来表示时间

1. 时间戳

2. 格式化的时间字符串  如2019-09-22

3. 元祖(9个元素)即struct_time

time.time()  返回当前时间的时间戳

import  time
print(time.time()) #返回当前时间的时间戳
time.localtime() 将一个时间戳转换为当前时区struct_time
import  time
print(time.localtime()) 

time.gmtime() 跟time.localtime()相似,将一个时间戳转换为UTC时区的struct_time

print(time.localtime())
print(time.gmtime())
<<<
D:\py_lise\dayday\venv\Scripts\python.exe D:/py_lise/dayday/第四章节/test1.py
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=22, tm_hour=23, tm_min=13, tm_sec=4, tm_wday=6, tm_yday=265, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=22, tm_hour=15, tm_min=13, tm_sec=4, tm_wday=6, tm_yday=265, tm_isdst=0)

time.mktime   将一个struct_time转换为时间戳

print(time.mktime(time.localtime()))
>>>
1569165404.0

time.sleep(secs)  线程推迟指定的时间运行

time.sleep(5)
print("----------------")

time.asctime(t) 把一个表示时间的元祖或者struct_time表示为这种形式:Sun Sep 22 23:24:19 2019v,如果没有参数,将会将time.locatime()作为参数参入

print(time.asctime())
<<<
Sun Sep 22 23:24:19 2019

time.strftime()   把一个代表时间的元祖或者struct_time转化为格式化的时间字符串

 

 

time.strptime()  把一个格式化的时间字符串转化为struct_time,和time.strftime() 向逆

 

 

datetime模块

 

 

 

random 随机数模块

验证码

命名规范:random_mod.py

1.random.randrange   >>返回1-10之间的一个随机数,不包括10

import random
random.randint(1,10)

2.random.randint(1,10)  >>返回1-10之间的一个随机数,包括10

>>> random.randint(1,10)
9
>>>

3. random.randrange(0,100,2)   随机选择0-100的偶数

import random

print(random.randrange(0,100,2))

4.random.rangdom()   返回一个随机浮点数

import random

print(random.random())

5.random.choice()返回一个给定数据集合中的随机字符

import random

print(random.choice('avfsdd$98'))

6.random.sample()  从多个字符中选取特定数量的字符

import random

print(random.sample('avfsdd$98',3))

string       生成随机字符串

1.  string.ascii_lowercase  返回有序的小写字符

import string

print(string.ascii_lowercase)

2.string.digits

import string

print(string.ascii_lowercase)
print(string.digits)

生成随机字符串

import string
import random
a=string.ascii_lowercase+string.digits
print(a)
b=random.sample(a,5)
print("".join(b))

洗牌

import string
import random
a=string.digits
print(a)
b=list(a)
print(b)
random.shuffle(b)
print(b) 

 

序列化pick&json模块

import pickle
d = {'k1':'v1','k2':'v2'}
f_dumps = pickle.dumps(d) #序列化
d_dumps = pickle.loads(f_dumps) #反序列化
print(d_dumps)
f = open("game.pkl","wb")
pickle.dump(d,f)
import  pickle

f = open("game.pkl","rb")
d1=pickle.load(f)
print(d1)

dump  写入文件

dumps  生成序列化的字符串

load  从文件加载

loads  把序列化的字符串反向解析  

json    VS      pickle

import json
d = {'k1':'v1','k2':'v2'}
json_1 = json.dumps(d)
print(json_1)
print(type(json_1))

输入:

{"k1": "v1", "k2": "v2"}
<class 'str'>

import json
d = {'k1':'v1','k2':'v2'}
# json_1 = json.dumps(d)
# print(json_1)
# print(type(json_1))
f = open("json.json","w")
json_2 = json.dump(d,f)
print(json_2)

 

import json
f = open("json.json","r")
json_3 = json.load(f)
print(json_3)

区别 

json:

支持所有语言

只支持常规的数据类型,str,int,  dict,  list  ,tuple

pickle:

只支持python

支持python里所有的数据类型

 

hashlib  加密

散列

hash碰撞

两个不同的输入,转化成相同的输出

在当前进程下,hash出的值是唯一,如果退出则变掉了

 加密算法在hash的基础上加工而成的

MD5

可以产生128位的散列值

特点“

1、压缩性

2、容易计算

3、抗修改性

4、强抗碰撞

MD5 不可逆

MD5的用途

1、防止篡改

2、防止看到明文

3、防止抵赖(数字签名)

SHA-1

安全hash算法

160位

升级SHA-256

文件copy模块shutil

 

 

 

正则表达式

 字符串的匹配规则,

.     默认匹配除\n之外的任意一个字符,

>>> re.search(".","abcddd")
<re.Match object; span=(0, 1), match='a'>
>>>

^  匹配字符开头

>>> re.search("^a","abcddd")
<re.Match object; span=(0, 1), match='a'>
>>> re.search("^abc","abcddd")
<re.Match object; span=(0, 3), match='abc'>
>>>

 $  匹配字符结尾

>>> re.search("abc$","abcdddabc")
<re.Match object; span=(6, 9), match='abc'>
>>>

 * 匹配*号前的字符0次或多次

>>> re.search("a*","aaaaaaaaaaaaaabcabcdddabc")
<re.Match object; span=(0, 14), match='aaaaaaaaaaaaaa'>
>>>

 +  匹配前一个字符1次或多次

>>> re.findall("aa+","aa9900888")
['aa']
>>> re.findall("aa+","aaaaaaa9900888")
['aaaaaaa']
>>> re.findall("aa+","aaaaaaa9900888aaa")
['aaaaaaa', 'aaa']
>>> re.findall("aa+","aaaaaaa990088aaa8aaa")
['aaaaaaa', 'aaa', 'aaa']
>>>

?  匹配前一个字符1次或0次

>>> re.search("a?","aaaaaaaaaaaaaabcabcdddabc")
<re.Match object; span=(0, 1), match='a'>
>>>

 {m}  匹配前一个字符m次

>>> re.search('b{3}','alexbbbs').group()
'bbb'
>>>

 {n,m}   匹配一个字符n到m次

>>> re.findall('b{2,3}','bbalbbbbexbbbs')
['bb', 'bbb', 'bbb']
>>>

| 匹配左或右的字符

>>> re.search('b|a','alexbbbs').group()
'a'
>>> re.search('b|a','balexbbbs').group()
'b'
>>>

(……) 分组匹配,

>>> re.search("(abc){2}a(123|45)", "abcabca456c").group()
'abcabca45'
>>>

\A  只从字符开头匹配

>>> re.search('\Aa','abalexbbbs')
<re.Match object; span=(0, 1), match='a'>
>>>

\Z   匹配字符结尾  同$

>>> re.search('a\Z','balexbbbsa')
<re.Match object; span=(9, 10), match='a'>
>>>

\d  匹配数字0-9  且只匹配一次

>>> re.search('\d','balexbb89999')
<re.Match object; span=(7, 8), match='8'>
>>>

\D  匹配非数字  且只匹配一次

>>> re.search('\D','balexbb89999')
<re.Match object; span=(0, 1), match='b'>
>>>

\w  匹配【A-Za-z0-9】  只匹配一次

>>> re.search('\w','balexbb89999')
<re.Match object; span=(0, 1), match='b'>
>>> re.search('\w','9balexbb89999')
<re.Match object; span=(0, 1), match='9'>
>>>

\W    匹配非【A-Za-z0-9】  只匹配一次

>>> re.search('\W','9balexbb89999****')
<re.Match object; span=(13, 14), match='*'>
>>>  

s    匹配空白字符、\t、\n、\r   只匹配一下

>>> re.search("\s+","ab\tc1\n3").group()
'\t'
>>> re.search("\s+","ab\nc1\n3").group()
'\n'
>>> 

(?P……)  分组匹配

re的匹配语法有一下几种

re.match  从头开始匹配

re.search   匹配包含

re.findall   把所有匹配到的字符放到以列表中的元素返回

re.split  以匹配到的字符当作列表分隔符

re.sub   匹配字符并替换

re.fullmatch   全部匹配

re.fullmatch

(pattern,string,flags=0)

pattern   正则表达式

string   要匹配的字符串

flags  标志位,用于控制正则表达式的匹配方式

 

转载于:https://www.cnblogs.com/hantongxue/p/11295213.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值