python常用模块(一)

time模块

学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895 817 687有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家一起学习交流!

常用表示时间方式: 时间戳,格式化的时间字符串,元组(struct_time)

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。

在这里插入图片描述
1. 时间戳转换成struct_time

>>> import time
>>> time.time()
1513821691.159022
>>> time.gmtime()     # 转换的是UTC时间
time.struct_time(tm_year=2017, tm_mon=12, tm_mday=21, tm_hour=2, tm_min=1, tm_sec=40, tm_wday=3, tm_yday=355, tm_isdst=0)
>>> x = time.localtime()       #转换的是本地时间(UTC+8)
>>> print(x)
time.struct_time(tm_year=2017, tm_mon=12, tm_mday=21, tm_hour=10, tm_min=1, tm_sec=49, tm_wday=3, tm_yday=355, tm_isdst=0)

tm_wday(0-6)   星期一是0,星期天是6

2. struct_time转换成时间戳

>>> time.mktime(x)        #x = time.localtime()
1513821709.0

3.struct_time转换成format_time

%a    本地(locale)简化星期名称
%A    本地完整星期名称
%b    本地简化月份名称
%B    本地完整月份名称
%c    本地相应的日期和时间表示
%d    一个月中的第几天(01 - 31%H    一天中的第几个小时(24小时制,00 - 23%I    第几个小时(12小时制,01 - 12%j    一年中的第几天(001 - 366%m    月份(01 - 12%M    分钟数(00 - 59%p    本地am或者pm的相应符    一
%S    秒(01 - 61)    二
%U    一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w    一个星期中的第几天(0 - 60是星期天)    三
%W    和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x    本地相应日期
%X    本地相应时间
%y    去掉世纪的年份(00 - 99%Y    完整的年份
%Z    时区的名字(如果不存在为空字符)
%%%’字符
>>> import time
>>> time.time()
1513822266.5659332
>>> x = time.localtime()
>>> print(x)
time.struct_time(tm_year=2017, tm_mon=12, tm_mday=21, tm_hour=10, tm_min=11, tm_sec=31, tm_wday=3, tm_yday=355, tm_isdst=0)
>>>
>>> time.strftime("%Y%m%d %H:%M:%S",x)
'20171221 10:11:31'
>>>

#语法:
#strftime(format,[tuple])

4 format_time转换成struct_time

>>> time.strftime("%Y%m%d %H:%M:%S",x)
'20171221 10:11:31'
>>>
>>>
>>> time.ct_time(tm_year=2017, tm_mon=12, tm_mday=21, tm_hour=10, tm_min=11, tm_sec=31, tm_wday=3, tm_yday=355, tm_isdst=-1)
用法:
strp('string',format

5.结构化时间转换成字符串时间
在这里插入图片描述

import time
x = time.localtime()
print(x)
print(time.asctime(x))

结果:
time.struct_time(tm_year=2017, tm_mon=12, tm_mday=21, tm_hour=10, tm_min=29, tm_sec=58, tm_wday=3, tm_yday=355, tm_isdst=0)

Thu Dec 21 10:29:58 2017

6.时间戳转换成字符串

>>> import time
>>> time.time()
1513823679.9577746
>>> print(time.ctime())
Thu Dec 21 10:34:50 2017

random模块

>>> import random
>>> random.random()    # 0~1 随机浮点数
0.6990063739837862
>>> random.randint(1,7)   #随机整数1~7
5
>>> random.randrange(1,7)   #随机整数,不包括7
4
>>> random.choice('hello world')   #获取一个随机元素
'l'
>>> random.choice(['1','2','3',])
'2'

>>> random.sample([1,2,3,4,5],3)
[1, 2, 4]
random.sample的函数原型为:random.sample(sequence, k),从指定
序列中随机获取指定长度的片

随机验证码

import random
def v_code():
    code = ""
    for i in range(4):
        num = random.randint(0,9)             #随机选择0~9
        A1Z1 = chr(random.randint(65,90))     #随机选择A~Z
        a1z1 = chr(random.randint(97,122))    #随机选择a~z
        add = random.choice([num,A1Z1,a1z1])  #随机选择其中一个
        code = "".join([code,str(add)])       #拼接一次选到的元素
    return code                               #返回验证码#
print(v_code())

结果:
5adc

OS模块

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

os.chdir()  #当前目录

os.chdir("dirname")  #改变当前脚本工作目录;相当于shell下cd    os.chdir(r"c:\Users")

os.curdir  #返回当前目录: ('.'),相当于shell下cd.

os.pardir # 获取当前目录的父目录字符串名:('..'),相当于shell下cd.. 返回上一层目录

os.makedirs('dirname1/dirname2')    #可生成多层递归目录      os.makedirs(r"c:\a\b\c")

os.removedirs('dirname1')    #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推      os.removedirs(r"c:\a\b\c")

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

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

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

os.remove()  #删除一个文件                  os.remove(r"c:\oldboy.txt")

os.rename("oldname","newname")  #重命名文件/目录      os.rename("c:\\test","c:\\test2")                    

os.stat('path/filename') # 获取文件/目录信息          os.stat("c:\\test2")

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

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

os.pathsep    #输出用于分割文件路径的字符串 

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

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

os.environ  #获取系统环境变量

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的大小

sys模块

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

shutil模块

高级的 文件、文件夹、压缩包 处理模块

shutil.copy(src, dst)
拷贝文件和权限

1 import shutil
2
3 shutil.copy('f1.log', 'f2.log')

shutil.copy2(src, dst)
拷贝文件和状态信息

shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹

shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

Json和pickle模块
什么是序列化?

我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化

为什么要序列化?

1:持久保存状态

需知一个软件/程序的执行就在处理一系列状态的变化,在编程语言中,'状态’会以各种各样有结构的数据类型(也可简单的理解为变量)的形式被保存在内存中。

内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。

在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。

具体的来说,你玩使命召唤闯到了第13关,你保存游戏状态,关机走人,下次再玩,还能从上次的位置开始继续闯关。或如,虚拟机状态的挂起等。

2:跨平台数据交互

序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

JSON和Python内置的数据类型对应如下:
在这里插入图片描述

1 import json
 2
 3 dic={'name':'alvin','age':23,'sex':'male'}
 4 print(type(dic))#<class 'dict'>
 5
 6 j=json.dumps(dic)
 7 print(type(j))#<class 'str'>
 8
 9
10 f=open('序列化对象','w')
11 f.write(j)  #-------------------等价于json.dump(dic,f)
12 f.close()
13 #-----------------------------反序列化<br>
14 import json
15 f=open('序列化对象')
16 data=json.loads(f.read())#  等价于data=json.load(f)



import json
#dct="{'1':111}"#json 不认单引号
#dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1}

dct='{"1":"111"}'
print(json.loads(dct))

#conclusion:
#        无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads

实例

import json

# 序列化
info = {'name':'derek','age':'22'}

with open('test','w') as f:
    f.write(json.dumps(info))

# 反序列化
with open('test','r') as f:
    info = json.loads(f.read())
    print(info)

pickle (它只能用于Python)

1 import pickle
 2
 3 dic={'name':'alvin','age':23,'sex':'male'}
 4
 5 print(type(dic))#<class 'dict'>
 6
 7 j=pickle.dumps(dic)
 8 print(type(j))#<class 'bytes'>
 9
10
11 f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
12 f.write(j)  #-------------------等价于pickle.dump(dic,f)
13
14 f.close()
15 #-------------------------反序列化
16 import pickle
17 f=open('序列化对象_pickle','rb')
18
19 data=pickle.loads(f.read())#  等价于data=pickle.load(f)
20
21
22 print(data['age'])   

总结:

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

dump()函数接受一个文件句柄和一个数据对象作为参数,把数据对象以特定的格式保存 到给定的文件中。当我们使用load()函数从文件中取出已保存的对象时,pickle知道如何恢复这些对象到它们本来的格式。

dumps()函数执行和dump() 函数相同的序列化。取代接受流对象并将序列化后的数据保存到磁盘文件,这个函数简单的返回序列化的数据。

loads()函数执行和load() 函数一样的反序列化。取代接受一个流对象并去文件读取序列化后的数据,它接受包含序列化后的数据的str对象, 直接返回的对象。

未完待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值