6 - 常用模块(os,sys,time&datetime,random,json&picle,shelve,hashlib)

时间:2024-01-12 11:44:50

导入模块

想使用 Python 源文件,只需在另一个源文件里执行 import 语句

import module1[, module2[,... moduleN]

from语句让你从模块中导入一个指定的部分到当前命名空间中

from modname import name1[, name2[, ... nameN]]
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_getframe', '_git', '_home', '_xoptions', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']

__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

if __name__ == '__main__':
print('程序自身在运行')
else:
print('被另一模块调用模块')

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 #输出用于分割文件路径的字符串
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) #目录分成list
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所指向的文件或者目录的最后修改时间

sys模块

sys.argv                #可以在后面添加参数用sys.argv[x]来获取
sys.exit(n) #退出程序,正常退出时exit(0)
sys.version #获取Python解释程序的版本信息
sys.maxint #最大的Int值
sys.path #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform #返回操作系统平台名称
sys.stdout.write('please:') #屏幕打印please

time & datetime模块

import time

print(time.time())        #当前时间搓
print(time.localtime()) #当前时间的struct_time print(time.altzone) #返回与utc时间的时间差,以秒计算
print(time.asctime()) #返回时间格式"Mon Feb 12 00:27:57 2018",
print(time.gmtime(time.time()-800000)) #返回utc时间的struc时间对象格式 # 日期字符串 转成 时间戳
time_struct = time.strptime("2016/05/22","%Y/%m/%d") #将日期字符串转成struct时间对象格式
stamp = time.mktime(time_struct) #将struct时间对象转成时间戳 #将时间戳转为字符串格式
print(time.gmtime(time.time() - 86640)) # 将utc时间戳转换成struct_time格式
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将utc struct_time格式转成指定的字符串格式 x = time.localtime(11111) #设置时间
print(x.tm_year,x.tm_yday)#打印年和日
print(time.mktime(x)) #打印时间 #格式化打印
print(time.strftime('%Y-%m-%d %H:%M:%S',x))
print(time.asctime(x))
print(time.strptime("2016/05/22","%Y/%m/%d")) """
%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 - 6,0是星期天) 三
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符
""" import datetime print(datetime.date.fromtimestamp(time.time()) ) #时间戳直接转成日期格式 2016-08-19
print(datetime.datetime.now()) #当前时间
print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
print(datetime.datetime.now().replace(hour=23))

random模块

import random

print(random.random())                 #用于生成一个0到1的随机符点数:
print (random.randint(1,7)) #随机生成1-7之间的数
print (random.randrange(1,10,2)) #随机生成0-9直接的奇数
print(random.choice('罗毅,张驿')) #随机生成一个元素
print(random.choice(['周思益','张驿','文艺','罗毅','林毅']))#随机生成一个名字
print(random.sample([1,2,3,4,5],3)) #随机获取指定长度的片段

json & pickle 模块

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换
import json

data1 = {
'name' : '刘瑶',
'age' : 17,
'post' : 'student'
} json_str = json.dumps(data1)
print ("Python数据:", repr(data1))
print ("JSON对象:", json_str)

data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['age']: ", data2['age']) """
运行结果: Python数据: {'name': '刘瑶', 'age': 17, 'post': 'student'}
JSON对象: {"name": "\u5218\u7476", "age": 17, "post": "student"}
data2['name']: 刘瑶
data2['age']: 17 """

json写入文件

# 写入 JSON 数据
with open('data.json', 'w') as f:
json.dump(data, f) #f.write(json.dumps(data))效果一样 # 读取数据
with open('data.json', 'r') as f:
data = json.load(f.read())

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据

# 写入 JSON 数据
with open('data.json', 'w') as f:
json.dump(data, f) # 读取数据
with open('data.json', 'r') as f:
data = json.load(f)

shelve 模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

import pickle

def abc(a):
print('aaaa',a) data0 = {
'name':'易俊杰',
'age':17,
'post':'student',
'imformation':abc
} #写入文件1
f = open('data.txt','wb') pickle.dump(data0,f) #f.write(pickle.dumps(data)) f.close() #读文件1
f = open('data.txt','rb') data3 = pickle.load(f) #data2 = json.loads(f.read())
print(data3['age'])
data3['imformation']('a') f.close() #写入文件2
class Text(object):
def __init__(self,n):
self.n = n d = shelve.open('shelve_txt') d['text'] = Text('刘思明')
d['name'] = ['谭佩瑶','陈贵龙','刘瑶'] d.close() #读文件2
d2 = shelve.open('shelve_txt') print(d2.get('text').n)
for k in d2:
print(k,d2[k]) d2.close()

hashlib模块 

用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。

import hashlib

# ######## md5 ########

hash = hashlib.md5()
hash.update(b'root')
print(hash.hexdigest()) # ######## sha1 ######## hash = hashlib.sha1()
hash.update(b'root')
print(hash.hexdigest()) # ######## sha256 ######## hash = hashlib.sha256()
hash.update(b'root')
print(hash.hexdigest()) # ######## sha384 ######## hash = hashlib.sha384()
hash.update(b'root')
print(hash.hexdigest()) # ######## sha512 ######## hash = hashlib.sha512()
hash.update(b'root')
print(hash.hexdigest())