21day学通python epub_python day21常用模块

⼀. 模块的简单认识

什么是模块. 模块就是我们把装有特定功能的代码进行归类的结果. 从代码编写的单位来看我们的程序, 从小到大的顺序: 一条代码 < 语句块 < 代码块(函数, 类) < 模块. 我们目前写的所有的py文件都是模块.

引入模块的⽅方式:

1. import 模块

2. from xxx import 模块

二.collection模块

collections模块主要封装了了⼀一些关于集合类的相关操作,还提供了⼀些除了基本数据类型以外的数据集合类型. Counter, deque, OrderDict, defaultdict以及namedtuple.

1.Counter

Counter是一个计数器,主要用来计数.

#计算一个字符中每个字符出现的次数:#方法一

s = "ccj like pig"dic={}for c ins:

dic[c]=dic.setdefault(c,0)+1

print(dic)#{'c': 2, 'j': 1, ' ': 2, 'l': 1, 'i': 2, 'k': 1, 'e': 1, 'p': 1, 'g': 1}

#方法二(Counter):

from collections importCounterprint(Counter(s))#Counter({'c': 2, ' ': 2, 'i': 2, 'j': 1, 'l': 1, 'k': 1, 'e': 1, 'p': 1, 'g': 1})

2.deque双向队列.

先了解两种数据结构:

1.栈 : FILO. 取数据时 会''先进后出''.(砌墙后取砖头)

2.队列 :  FILO.取数据时 会''先进先出''. (类似排队)

#队列: python提供了queue模块. 使用起来非常方便

importqueue

q=queue.Queue()

q.put("李")

q.put("张")

q.put("孙")print(q.get())print(q.get())print(q.get())print(q.get()) #这里无数据可取#注意. 如果队列里没有元素了. 再也拿不出来元素了,此时程序会阻塞.

deque, 注意, 此队列是collections中的.

from collections importdeque

q=deque()

q.append("张开") #右侧添加

q.append("贝尔")

q.appendleft("赵廷") #左侧添加

q.appendleft("高圆")print(q) #deque(['高圆', '赵廷', '张开', '贝尔'])

print(q.pop()) #贝尔 #右侧删除

print(q.popleft()) #高圆 #左侧删除

3. namedtuple 命名元组

命名元组, 顾名思义. 给元组内的元素进⾏命名. 比如. 我们说(x, y) 这是⼀个元组. 同时. 我们还可以认为这是⼀个点坐标. 这时, 我们就可以使用namedtuple对元素进⾏命名.

from collections importnamedtuple#自己定义了一个元组, 这其实就是创建了一个类

nt = namedtuple("point", ["x", "y"])

p= nt(1, 2)print(p) #point(x=1, y=2)print(p.x)# 1print(p.y) # 2

4.defaultdict

defaultdict: 可以给字典设置默认值. 当key不存在时. 直接获取默认值:

from collections importdefaultdict

dd= defaultdict(list) #默认值list

print(dd['哈哈']) #[ ] 当key不存在的时候. 会自动执行构造方法中传递的内容.

lst =[11,22,33,44,55,66,77,88]

d=defaultdict(list) #创建一个字典,默认字典里是列表

for el inlst:if el <66:

d['K1'].append(el) #字典里Key不存在,则取默认值空列表[], dic['key]会创建key.

else:

d['K2'].append(el)print(d)#defaultdict(, {'K1': [11, 22, 33, 44, 55], 'K2': [66, 77, 88]})

三. time 时间模块

importtimeprint(time.time()) #打印出当前系统时间(时间戳) 结果为一串数字如:1538927647.483177

在python中时间分成三种表现形式:

1. 时间戳(timestamp). 时间戳使用的是从1970年01月01⽇00点00分00秒到现在⼀共经过了多少秒... 使⽤float来表示.

2. 格式化时间(strftime). 这个时间可以根据我们的需要对时间进⾏任意的格式化.

3. 结构化时间(struct_time). 这个时间主要可以把时间进⾏行行分类划分. 比如. 1970年年01⽉月01⽇日 00点00分00秒 这个时间可以被细分为年, 月, 日.....⼀大堆东西.时间戳我们已经见过了就是time.time(). ⼀般, 我们不会把这样的时间显示给客户,那就需要对时间进行格式化操作.

importtime

shijian= time.strftime("%Y-%m-%d %H:%M:%S")print(shijian) #2018-11-14 19:27:12

日期格式化的标准:

%y  两位数的年份表示(00-99)

%Y  四位数的年份表示(000-9999)

%m 月份(01-12)

%d  月内中的⼀天(0-31)

%H  24小时制小时数(0-23)

%I   12小时制小时数(01-12)

%M 分钟数(00=59)

%S  秒(00-59)

%a  本地简化星期名称

%A 本地完整星期名称

%b  本地简化的月份名称

%B  本地完整的月份名称

%c  本地相应的日期表示和时间表示

%j   年内的⼀天(001-366)

%p  本地A.M.或P.M.的等价符

%U  ⼀年中的星期数(00-53)星期天为星期的开始

%w  星期(0-6),星期天为星期的开始

%W  ⼀年中的星期数(00-53)星期⼀一为星期的开始

%x   本地相应的日期表示

%X   本地相应的时间表示

%Z   当前时区的名称

%%   %号本身

时间格式的转换:

时间戳 转 格式化时间, 需要先转成结构化时间再转格式化时间.

格式化时间 转 时间戳时间,需要先转成结构化时间再转时间戳时间.

也就是说都得通过结构化时间来转化.

#当前结构化时间

importtimeprint(time.localtime())#结果:time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=19, tm_min=38, tm_sec=36, tm_wday=2, tm_yday=318, tm_isdst=0)

比如. 我们的数据库中存储了这样⼀个时间: 1888888888. 如何显示成xxxx年xx月xx⽇?

importtime#时间戳:1888888888

shijianchuo=1888888888 #时间戳为1888888888

t_jiegou=time.localtime(shijianchuo) #先为转结构化时间

print(t_jiegou) #time.struct_time(tm_year=2029, tm_mon=11, tm_mday=9, tm_hour=11, tm_min=21, tm_sec=28, tm_wday=4, tm_yday=313, tm_isdst=0)

t_geshi=time.strftime('%Y-%m%-%d %H:%M:%S',t_jiegou) #再转格式化时间 (XXXX年-XX月-XX日 XX时:XX分:XX秒)

print(t_geshi) #打印出格式化后的时间2029-11-09 11:21:28

格式化时间再转回时间戳:

#格式化时间转时间戳

s2='2029-11-09 11:21:28' #格式化时间其实就是字符串格式

t_jiegou=time.strptime(s2,'%Y-%m-%d %H:%M:%S') #把格式化时间转成结构化时间

t_shijian=time.mktime(t_jiegou) #得到结构化时间,再转成时间戳

print(t_shijian) #1888888888.0 一般带小数.0

四. random模块

所有关于随机相关的内容都在random模块中.

importrandomprint(random.randint(1,3)) #1,2,3随机抽选一个

print(random.random()) #随机 (0,1)中的小数

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

print(random.choice(['1','2','3','4'])) #随机选择其中一个

print(random.sample(['1','2','[34]','SB'],2)) #随机两个 ['2', '[34]']

lst=['1','2','[34]','SS']

random.shuffle(lst)#打乱顺序 ['[34]', '2', 'SS', '1']

print(lst)

五. os模块

所有和操作系统相关的内容都在os模块.

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.system("bash command") 运行shell命令,直接显示

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

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

os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd#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.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"os.linesep 输出当前平台使用的行终止符, win下为"\r\n",Linux下为"\n"os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:

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

六. sys模块

所有和python解释器相关的都在sys模块.

sys.argv 命令⾏行行参数List,第⼀个元素是程序本身路路径

sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)

sys.version 获取Python解释程序的版本信息

sys.path 返回模块的搜索路路径,初始化时使⽤用PYTHONPATH环境变量量的值

sys.platform 返回操作系统平台名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值