首页 > 代码库 > 常见模块(续上次)

常见模块(续上次)

一.time模块

  常用方法:

        time.time()   获取当前时间戳

        time.sleep(t)  推迟指定的时间运行

  1.表示时间的三种方式:

   时间戳,格式化的时间字符串,时间元组

 1 #时间戳:
 2 print(time.time())
 3 #1502176744.8150175
 4 
 5 #格式化时间字符串
 6 print(time.strftime(%Y/%m/%d %H:%M:%S))
 7 2017/08/08 15:27:19
 8 
 9 #时间元组
10 #localtime将一个时间戳转换为当前时区的struct_time
11 t = time.local()
12 #time.struct_time(tm_year=2017, tm_mon=8, tm_mday=8, tm_hour=15, tm_min=30, tm_sec=45, tm_wday=1, tm_yday=220, tm_isdst=0)

   总结:小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

#几种格式之间的转换

#时间戳-->结构化时间
#time.gmtime()  #英国伦敦当地时间 UTC
#time.localtime() #当地时间

#结构化时间-->时间戳
#time_tuple = time.localtime(1500000000)
#time.mktime(time_tuple)
#1500000000.0

#结构化时间-->字符串格式化时间
#time.strftime("%Y-%m-%d",time.localtime(1500000000))
#‘2017-07-14‘

#字符串格式化时间-->结构化时间
#time.strptime("07/24/2017","%m/%d/%Y")
#time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
#结构化时间-->%a %d %d %H:%M:%S %Y串
#time.asctime(time.localtime(1500000000))
#‘Fri Jul 14 10:40:00 2017‘
#time.asctime()
#‘Mon Jul 24 15:18:33 2017‘

#%a %d %d %H:%M:%S %Y串 --> 结构化时间
#time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串
#time.ctime()
#‘Tue Aug  8 15:56:20 2017‘
#time.ctime(1500000000)
#‘Fri Jul 14 10:40:00 2017‘ 

二.random模块

#import time

#随机小数
#random.random()     (0-1小数)
#0.9167746266539144
#random.uniform(1,3)  (1-3小数)
#1.9542609515193614

#随机整数
#random. randint(1,5)  (1-5间随机整数,可取到5)
#2

#随机选择一个或者多个返回
#random.choice(1,5,[5,6])
#random.sample([[4,5],[89,58],99,66],2)
#2为返回的个数

#打乱列表顺序
#li = [4,5,6,8,2,7]
#random.shuffle(li)  (返回值为None)
#print(li)
#[5, 6, 2, 7, 8, 4]  (每次返回结果顺序不一样)

三.osmo模块

# 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.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的大小
# stat 结构:
# 
# st_mode: inode 保护模式
# st_ino: inode 节点号。
# st_dev: inode 驻留的设备。
# st_nlink: inode 的链接数。
# st_uid: 所有者的用户ID。
# st_gid: 所有者的组ID。
# st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
# st_atime: 上次访问的时间。
# st_mtime: 最后一次修改的时间。
# st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

四.sys模块

  sys模块是与python解释器交互的一个接口

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

五.序列化模块

  序列化定义:将原本列表、字典等内容专户为字符串的过程

  eval():将字符串str当成有效的表达式来求值并返回计算结果

  缺点:虽然eval()也能实现此功能,但是安全性差

  1、以某种存储形式使自定义对象持久化;

  2、将对象从一个地方传递到另一个地方。

 

  3、使程序更具维护性。

 

  对象持久化(对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术)

  Json模块(dump,dumps,load,loads)

#dumps loads  
# import json
# dic = {‘k1‘:56,‘k2‘:85,‘k3‘:‘egon‘}
# dic_str = json.dumps(dic)
# print(type(dic_str),dic_str) #序列化
# <class ‘str‘> {"k1": 56, "k2": 85, "k3": "egon"}
# str_dict = json.loads(dic_str)
# print(type(str_dict),str_dict) #反序列化
# <class ‘dict‘> {‘k1‘: 56, ‘k2‘: 85, ‘k3‘: ‘egon‘}

#也可嵌套使用
# import json
# l = [1,[1,2,3],{‘k1‘:‘egon‘,‘k2‘:‘alex‘},5]
# l_str = json.dumps(l)
# print(type(l_str),l_str)
# # <class ‘str‘> [1, [1, 2, 3], {"k1": "egon", "k2": "alex"}, 5]
# str_l = json.loads(l_str)
# print(type(str_l),str_l)
 # <class ‘list‘> [1, [1, 2, 3], {‘k1‘: ‘egon‘, ‘k2‘: ‘alex‘}, 5]
import json
# f1 = open(‘json_file‘,‘w‘)
# dic = {‘k1‘:‘zhiku‘,‘k2‘:‘huawei‘,‘k3‘:‘chuanqi‘}
# json.dump(dic,f1)
# f.close()
 #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件

# f2 = open(‘json_file‘)
# dic1 = json.load(f2)
# print(type(dic1),dic1)
# <class ‘dict‘> {‘k1‘: ‘zhiku‘, ‘k2‘: ‘huawei‘, ‘k3‘: ‘chuanqi‘}
 #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回

  json&pickle模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换
  • pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化
import pickle
dic = {k1:v1,k2:v2,k3:v3}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二进制内容
#b‘\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.‘

dic2 = pickle.loads(str_dic)
print(dic2)    #字典
#{‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘}

import time
struct_time  = time.localtime(1000000000)
print(struct_time)
#time.struct_time(tm_year=2001, tm_mon=9, tm_mday=9, tm_hour=9, tm_min=46, tm_sec=40, tm_wday=6, tm_yday=252, tm_isdst=0)
f = open(pickle_file,wb)
pickle.dump(struct_time,f)
f.close()

f = open(pickle_file,rb)
struct_time2 = pickle.load(f)
print(struct_time.tm_year)
#2001

 

  shelve模块

  shelve只提供给我们一个open方法,是用key来访问的,使用起来和字典类似。

 

#import shelve
# f = shelve.open(‘shelve_file‘)
# f[‘key‘] ={‘k1‘:‘niucha‘,‘k2‘:‘daoxiang‘,‘k3‘:‘egon‘}#如果k不存在则报错
# f.close()
# 
# f1 = shelve.open(‘shelve_file‘)
# existing = f1[‘key‘]
# f1.close()
# print(existing) 
# {‘k1‘: ‘niucha‘, ‘k2‘: ‘daoxiang‘, ‘k3‘: ‘egon‘}

 

  这个模块有个限制:不支持多个程序同一时间往同一个文件中进行写操作,如果只是读文件,可以用其打开。

  shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。

# import shelve
# f = shelve.open(‘shelve_file‘)
# print(f[‘key‘])
# f[‘key‘][‘new_value‘] = ‘this is a beautiful girl‘
# print(f[‘key‘])
# f.close()

# import shelve
# f1 = shelve.open(‘shelve_file‘,writeback=True)
# print(f1[‘key‘])
# f1[‘key‘][‘new_value‘] = ‘this is a beautiful girl‘
# print(f1[‘key‘])
# f1.close()
#{‘k1‘: ‘niucha‘, ‘k2‘: ‘daoxiang‘, ‘k3‘: ‘egon‘, ‘new_value‘: ‘this is a beautiful girl‘}

 

 

 

 

 

常见模块(续上次)