首页 > Web开发 > 详细

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

时间:2018-02-12 10:38:43      阅读:479      评论:0      收藏:0      [点我收藏+]

导入模块

想使用 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)的第二个元素
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())

 

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

原文:https://www.cnblogs.com/StringSir/p/8443548.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!