什么是模块?

常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

但其实import加载的模块分为四个通用类别:

1 使用python编写的代码(.py文件)

2 已被编译为共享库或DLL的C或C++扩展

3 包好一组模块的包

4 使用C编写并链接到python解释器的内置模块

为何要使用模块?

如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,

模块的导入和使用

模块的导入应该在程序开始的地方

一.时间模块

#time#操作系统在控制时间#对我们的程序有作用 : 记录程序的执行过程,记录用户的行为,统计效率

#三种格式

#1. 时间戳格式 浮点型的小数 方便计算机进行计算的

importtime#print(time.time()) # 1534042858.4695284 单位是秒

#2.结构化格式 # 时间戳格式和格式化格式的一种中间状态#print(time.localtime())#print(time.gmtime())

#3.格式化格式 # 给人看的#print(time.strftime('%Y/%m/%d %H:%M:%S'))#print(time.strftime('%H:%M:%S %Y/%m/%d '))#print(time.strftime('%H:%M:%S %y/%m/%d '))#print(time.strftime('%c'))

#三种格式的转换#时间戳 --> 格式化#1500000000 --> 2017/07/14 10:40:00#struct_time = time.localtime(1500000000)#print(struct_time)#print(time.strftime('%Y/%m/%d %H:%M:%S',struct_time))

#print(time.localtime(3000000000))

#格式化 --> 时间戳#2018.8.8 -->#struct_time = time.strptime('2008.8.8','%Y.%m.%d')#print(struct_time)#print(time.mktime(struct_time))

#写一个函数 计算 当前月1号的时间戳时间#def get01():#str_time = time.strftime('%Y-%m')## struct_time = time.strptime(str_time+"-1",'%Y-%m-%d') #'2018-08-1'#struct_time = time.strptime(str_time,'%Y-%m') #'2018-08' '-1 0:0:0'#return time.mktime(struct_time)#

#print(get01())

#time模块#计算时间差#12:01 - 11:59#2018-8-12 11:45 - 2018-8-11 23:05

#time.sleep(1) # 程序在这里阻塞1秒钟

时间模块

二. random随机模块

importrandom#随机 : 验证码 抽奖 彩票 洗牌 发红包

#随机小数#print(random.random())#print(random.uniform(1,3))

#随机整数#print(random.randint(1,100)) # [1,2]#print(random.randrange(1,2)) # [1,2)#print(random.randrange(1,100,2)) # [1,2)

#随机抽取#print(random.choice([1,2,3,'abc',('a','c')]))#print(random.sample([1,2,3,'abc',('a','c')],2))

#打乱顺序#lst = list(range(100))#random.shuffle(lst)#print(lst)

#验证码#四位纯数字 验证码#random.randint(1000,9999)#res = ''#for i in range(4):#num = random.randint(0,9)#res += str(num)#print(res)

#def func(n=4):#res = ''#for i in range(n):#num = random.randint(0,9)#res += str(num)#return res#print(func())

#数字 字母 组成的验证码#随机数字#随机字母#某一位上 是数字 还是字母 也应该是随机事件

def func(n=6 ,alph =True):

ret= ''

for i inrange(n):

code= str(random.randint(0,9))ifalph:

alph_lower= chr(random.randint(97,122))

alph_upper= chr(random.randint(65,90))

code=random.choice([code,alph_lower,alph_upper])

ret+=codereturnretprint(func())

随机模块

三.sys模块

#sys python解释器相关的功能

importsys#print(sys.platform)#sys.exit() # 退出程序用的 exit()

#print(sys.argv) # 列表 执行python命令的时候 写在python后面的内容#D:\sylar\workspace\day05\8.sys模块.py#name = input('name:')#pwd = input('pwd:')

#name = sys.argv[1]#pwd = sys.argv[2]#if name == 'alex' and pwd == 'alex3714':#print('登陆成功')#else:exit()#print('我的功能')

#sys.modules#print(sys.modules) # 大字典,字典里是所有已经被导入的模块#'字符串 模块名':'这个模块所在的内存空间'#name = 'alex'#print(sys.modules['__main__'])#print(sys.modules['sys'])

#print(sys.path)#内置模块、第三方模块的导入 你不需要操心path#自定义模块的时候 文件的导入 还需要你自己去处理sys.path列表

sys模块

四 OS模块

'''os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd

os.curdir 返回当前目录: ('.')

os.pardir 获取当前目录的父目录字符串名:('..')

os.makedirs('dirname1/dirname2') 可生成多层递归目录

os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname

os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

os.remove() 删除一个文件

os.rename("oldname","newname") 重命名文件/目录

os.stat('path/filename') 获取文件/目录信息

os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"

os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:

os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

os.system("bash command") 运行shell命令,直接显示

os.popen("bash command).read() 运行shell命令,获取执行结果

os.environ 获取系统环境变量

os.path

os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。

即os.path.split(path)的第二个元素

os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False

os.path.isabs(path) 如果path是绝对路径,返回True

os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False

os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False

os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间

os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

os.path.getsize(path) 返回path的大小'''

os 模块

五.

#什么是序列 : 列表 元组 字符串#什么是序列化 :序列 - 字符串

#把复杂的数据类型 转换成 序列(字符串、bytes)的过程 —— 序列化

#列表 字典 元组 集合 -> 字符串

#把序列 转换回 复杂的数据类型 的过程 —— 反序列化#为什么要有序列化

#1.网络传输

#2.文件存储#有哪些序列化相关的模块

#json

#pickle

#shelve#都怎么用

importjson#dic = {'key':'value','k2':[1,2],2:(2,3)}#ret = json.dumps(dic)#print(type(dic),dic)#print(type(ret),ret)#with open('json_file','w') as f:#f.write(ret)

#json 的格式非常严格#字典的key必须是字符串数据类型#能够支持的数据类型非常有限 : 数字 字符串 字典 列表#字符串必须是用英文双引号的括起来的

#格式严格的原因 : 在其他的语言中没有出现过的数据类型是不能出现在json格式中的

#dic = {(1,2,3):'value'}#json.dumps(dic)

#se = {1,2,3}#json.dumps(se)

#with open('json_file','r') as f:#content = f.read()#print(type(content),content)#dic = json.loads(content)#print(type(dic),dic)

#dumps 序列化方法#loads 反序列化方法

#dump/load#with open('json_file','r') as f:#ret = json.load(f)#print(type(ret),ret)

#with open('json_file','w') as f:#json.dump({'k':'v'},f)

#多次dump虽然可以,但是就无法load出数据了#with open('json_file','w') as f:#json.dump({'k':'v'},f)#json.dump({'k11':'v'},f)#json.dump({'k22':'v'},f)#json.dump({'k3':'v'},f)#json.dump({'k4':'v'},f)

#with open('json_file','r') as f:#ret = json.load(f)#print(type(ret),ret)

#w打开文件#dumps 字符串#write(字符串+'\n')

#r打开文件#for line in f:#json.loads(line.strip())

#import json#data = {'username':['李华','二愣子'],'sex':'male','age':16}#json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)#json_dic3 = json.dumps(data)#print(json_dic2)#print(json_dic3)

序列化模块jsin

importpickle#dumps的结果是bytes数据类型,所以写文件的时候'rb'#支持的数据类型多#支持多次load 和 多次dump

#dumps loads#dump load#dic = {'key':'value','k2':[1,2],2:(2,3)}#ret = pickle.dumps(dic)#print(ret)#with open('pickle_file','wb') as f:#f.write(ret)

#with open('pickle_file','rb') as f:#content = f.read()#print(pickle.loads(content))

#dump load#with open('pickle_file','wb') as f:#pickle.dump({'kkk','vvv',1,2,3,4},f)#pickle.dump({(1,2,3):'vvv'},f)#pickle.dump([1,2,3],f)

with open('pickle_file','rb') as f:whileTrue:try:print(pickle.load(f))except EOFError:break

序列化模块pickel

七.

importshelve#f = shelve.open('shelve_file')## f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据## f.close()

#import shelve#f1 = shelve.open('shelve_file')#existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错#f1.close()#print(existing)

序列化模块-shelve

八.re模块     http://tool.chinaz.com/regex 在线验证正则

这是京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示。假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我们格式有误。这个功能是怎么实现的呢?假如现在你用python写一段代码,类似:

phone_number = input('please input your phone number :')

你怎么判断这个phone_number是合法的呢?

根据手机号码一共11位并且是只以13、14、15、18开头的数字这些特点,我们用python写了如下代码:

whileTrue:

phone_number= input('please input your phone number :')if len(phone_number) == 11\andphone_number.isdigit()\and (phone_number.startswith('13') \or phone_number.startswith('14') \or phone_number.startswith('15') \or phone_number.startswith('18')):print('是合法的手机号码')else:print('不是合法的手机号码')

这是你的写法,现在我要展示一下我的写法:

importre

phone_number= input('please input your phone number :')if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):print('是合法的手机号码')else:print('不是合法的手机号码')

对比上面的两种写法,此时此刻,我要问你你喜欢哪种方法呀?你肯定还是会说第一种,为什么呢?因为第一种不用学呀!但是如果现在有一个文件,我让你从整个文件里匹配出所有的手机号码。你用python给我写个试试?但是学了今天的技能之后,分分钟帮你搞定!

今天我们要学习python里的re模块和正则表达式,学会了这个就可以帮我们解决刚刚的疑问。正则表达式不仅在python领域,在整个编程届都占有举足轻重的地位。

不管以后你是不是去做python开发,只要你是一个程序员就应该了解正则表达式的基本使用。如果未来你要在爬虫领域发展,你就更应该好好学习这方面的知识。

但是你要知道,re模块本质上和正则表达式没有一毛钱的关系。re模块和正则表达式的关系 类似于 time模块和时间的关系

你没有学习python之前,也不知道有一个time模块,但是你已经认识时间了12:30就表示中午十二点半(这个时间可好,一般这会儿就该下课了)。

时间有自己的格式,年月日时分秒,12个月,365天......已经成为了一种规则。你也早就牢记于心了。time模块只不过是python提供给我们的可以方便我们操作时间的一个工具而已

正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则。

官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式

一说规则我已经知道你很晕了,现在就让我们先来看一些实际的应用。

首先你要知道的是,谈到正则,就只和字符串相关了。在我给你提供的工具中,你输入的每一个字都是一个字符串。其次,如果在一个位置的一个值,不会出现什么变化,那么是不需要规则的。  比如你要用"1"去匹配"1",或者用"2"去匹配"2",直接就可以匹配上。这连python的字符串操作都可以轻松做到。那么在之后我们更多要考虑的是在同一个位置上可以出现的字符的范围。

字符组 : [字符组]

在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示

字符分为很多类,比如数字、字母、标点等等。

假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。

正则

待匹配字符

匹配结果

说明

[0123456789]

8

True

在一个字符组里枚举合法的所有字符,字符组里的任意一个字符和"待匹配字符"相同都视为可以匹配

[0123456789]

a

False

由于字符组中没有"a"字符,所以不能匹配

[0-9]

7

True

也可以用-表示范围,[0-9]就和[0123456789]是一个意思

[a-z]

s

True

同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示

[A-Z]

B

True

[A-Z]就表示所有的大写字母

[0-9a-fA-F]

e

True

可以匹配数字,大小写形式的a~f,用来验证十六进制字符

字符:

元字符

匹配内容

.

匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线

\s

匹配任意的空白符

\d

匹配数字

\n

匹配一个换行符

\t

匹配一个制表符

\b

匹配一个单词的结尾

^

匹配字符串的开始

$

匹配字符串的结尾

\W

匹配非字母或数字或下划线

\D

匹配非数字

\S

匹配非空白符

a|b

匹配字符a或字符b

()

匹配括号内的表达式,也表示一个组

[...]

匹配字符组中的字符

[^...]

匹配除了字符组中字符的所有字符

量词:

量词

用法说明

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

. ^ $

正则

待匹配字符

匹配结果

说明

海.

海燕海娇海东

海燕海娇海东

匹配所有"海."的字符

^海.

海燕海娇海东

海燕

只从开头匹配"海."

海.$

海燕海娇海东

海东

只匹配结尾的"海.$"

* + ? { }

正则

待匹配字符

匹配结果

说明

李.?

李杰和李莲英和李二棍子

李杰李莲李二

?表示重复零次或一次,即只匹配"李"后面一个任意字符

李.*

李杰和李莲英和李二棍子

李杰和李莲英和李二棍子

*表示重复零次或多次,即匹配"李"后面0或多个任意字符

李.+

李杰和李莲英和李二棍子

李杰和李莲英和李二棍子

+表示重复一次或多次,即只匹配"李"后面1个或多个任意字符

李.{1,2}

李杰和李莲英和李二棍子

李杰和李莲英李二棍

{1,2}匹配1到2次任意字符

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

正则

待匹配字符

匹配结果

说明

李.*?

李杰和李莲英和李二棍子

李李李

惰性匹配

字符集[][^]

正则

待匹配字符

匹配结果

说明

李[杰莲英二棍子]*

李杰和李莲英和李二棍子

李杰李莲英李二棍子

表示匹配"李"字后面[杰莲英二棍子]的字符任意次

李[^和]*

李杰和李莲英和李二棍子

李杰李莲英李二棍子

表示匹配一个不是"和"的字符任意次

[\d]

456bdha3

4563

表示匹配任意一个数字,匹配到4个结果

[\d]+

456bdha3

4563

表示匹配任意个数字,匹配到2个结果

分组 ()与 或 |[^]

身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部

python五大模块_python-5-常用模块相关推荐

  1. python的主要应用领域及常用的函数模块_python之常用模块篇5

    一.日志模块,logging模块 1)logging模块简单使用,屏幕输出.默认级别30 import logging logging.debug('debug...') # 10logging.in ...

  2. python keys模块_python自动化常用模块

    python自动化常用函数 导入time模块 import time 导入ActionChains模块(鼠标) from selenium.webdriver.common.action_chains ...

  3. python中common在哪个模块导入_python的常用模块之collections模块详解

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  4. python模块讲解_python中常用模块详解一

    1.time 模块 import time s = time.localtime() # 把时间转化成格式化的时间,通过. 取得里面的年月日等 struct_time 格式 time.struct_t ...

  5. python的窗口处理模块_python的图像处理模块

    除了opencv专门用来进行图像处理,可以进行像素级.特征级.语义级.应用级的图像处理外,python中还有其他库用来进行简单的图像处理,比如图像的读入和保存.滤波.直方图均衡等简单的操作,下面对这些 ...

  6. python安装os模块_python的os模块(ipython,文件,目录,权限,管理)

    什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道,这时就离不了o ...

  7. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple

    collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...

  8. python标准类型内建模块_Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Pytho ...

  9. python中产生随机数模块_Python中random模块生成随机数详解

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  10. python xlrd模块_python之xlrd模块

    xlrd模块 一.xlrd模块 1.python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库,这两个适用于.xls格式有效 2. xlrd模块 ...

最新文章

  1. C语言中的弱符号与强符号介绍
  2. 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows
  3. C++ Primer 第Ⅲ部分笔记——类设计者的工具
  4. 理解关联容器“map”的关键点
  5. 报表通过url向数据集传参
  6. Log4J 最佳实践之全能配置文件
  7. mock gps android,MockGPS: Android application to fake GPS
  8. java jave_JAVE
  9. D2 日报 2019年6月5日
  10. 计算机数字媒体毕业论文,数字媒体技术毕业设计(关于数字媒体技术的论文)
  11. python hist函数_Python Pandas.DataFrame.hist()用法及代码示例
  12. 「 iOS知识小集 」2018 · 第 29 期
  13. 梨花院落溶溶月,柳絮池塘淡淡风-- 我心中的七剑与梁羽生
  14. 微信小程序商城篇(一)首页功能
  15. centos 硬盘挂载
  16. 操作系统实验一:线程的创建与撤销
  17. 【雷达与对抗】【2018.05】用于调制信号分类的深度神经网络结构
  18. 国稻种芯百团计划行动 丰收节贸促会:袁氏高科全球新通道
  19. python 期末考
  20. 未定义的标识符:IplImage

热门文章

  1. 【Practical】产生不大于N的连续素数序列 —— 埃拉托色尼筛法
  2. 你对Web3的迅速发展一无所知,逃离大厂去拥抱Web3
  3. 2013年第四届C/C++ A组蓝桥杯省赛真题
  4. Python练习猜拳,利用while循环自定义函数,结果数据存入excel表格
  5. 交换机的带宽线速概念
  6. 旧貌换新颜 | 凯云科技整装待发,迎风飞扬
  7. 一些电脑清理方法,学起来,总会用到的
  8. visio-软件设计的各种图
  9. 【ONE·C || 初识C语言 】
  10. mac linux 笔记