python内置模块[sys,os,os.path,stat]

不羁岁月 提交于 2020-03-18 14:52:06

内置模块是python自带功能,在使用内置模块时,需要遵循 先导入使用

一、sys

对象描述
sys.argv命令行参数获取,返回类型为列表,第一个元素为程序的本身的路径
sys.path返回模块的搜索路径列表,第一个元素为当前程序所在目录;初始化时使用PYTHONPATH环境变量的值
sys.modules.keys()返回所有已经导入的模块列表
sys.modules返回所有已经导入的模块字典,key模块名,value是模块路径
sys.exc_info()获取当前正在处理的异常类,exc_type,exc_value,exc_traceback当前处理的异常详细信息
sys.exc_clear()用来清除当前线程所出现的当前的或最近的错误信息
sys.exec_prefix返回python文件安装的位置
sys.exit(n)退出程序,正常退出时exit(0)
sys.hexversion获取python解释程序的版本值,16进制格式如:0x020103F0
sys.version获取python解释程序的版本信息
sys.displayhook(value)如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档)
sys.excepthook异常回溯相关
sys.stdin标准输入
sys.stdin.read()输入一行
sys.stdin.readline()从标准输入读一行,sys.stdout.write("a") 屏幕输出a
sys.stdout标准输出
sys.stdout.write(‘aaa’)标准输出内容
sys.stdout.writelines()无换行输出
sys.stderr错误相关
sys.pathform返回操作系统平台名称
sys.byteorder本地字节规则的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’
sys.copyright记录python版权相关的东西
sys.api_version解释器的C的API版本
sys.version_info'final'表示最终,也有'candidate'表示候选,表示版本级别,是否有后继的发行
sys.getdefaultencoding()返回当前你所用的默认的字符编码格式
sys.getfilesystemencoding()返回将Unicode文件名转换成系统文件名的编码的名字
sys.builtin_module_namesPython解释器导入的内建模块列表
sys.executablePython解释程序路径
sys.getwindowsversion()获取Windows的版本
  

二、os模块

对象描述
os.remove()删除文件
os.unlink()删除文件
os.rename()重命名文件
os.listdir()列出指定目录下所有文件
os.curdir返回当前目录: ('.')
os.pardir获取当前目录的父目录字符串名:('..')
os.chdir()改变当前工作目录
os.getcwd()获取当前文件路径
os.mkdir()新建目录
os.rmdir()删除空目录(删除非空目录, 使用shutil.rmtree())
os.makedirs()创建多级目录
os.removedirs()删除多级目录
os.stat(file)获取文件属性
os.chmod(file)修改文件权限
os.utime(file)修改文件时间戳
os.name获取操作系统标识,字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.sep操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep用于分割文件路径的字符串
os.environ获取系统环境变量
os.system()执行操作系统命令
os.execvp()启动一个新进程
os.access(path, mode)判断文件权限
os.wait()等待任何一个子进程结束,返回一个tuple,包括子进程的进程ID和退出状态信息

三、os.path模块

os.path.getctime()返回文件创返回文件大小 字节单位建时间 浮点型os.path.getsize()

对象描述
os.path.split(filename)将文件路径和文件名分割(会将最后一个目录作为文件名而分离)
os.path.splitext(filename)将文件路径和文件扩展名分割成一个元组
os.path.dirname(filename)返回文件路径的目录部分
os.path.basename(filename)返回文件路径的文件名部分
os.path.join(dirname,basename)将文件路径和文件名凑成完整文件路径
os.path.abspath(name)获得绝对路径
os.path.splitunc(path)把路径分割为挂载点和文件名
os.path.normpath(path)规范path字符串形式
os.path.exists()判断文件或目录是否存在
os.path.isabs()如果path是绝对路径,返回True
os.path.realpath(path)返回path的真实路径
os.path.relpath(path[, start])从start开始计算相对路径
os.path.normcase(path)转换path的大小写和斜杠
os.path.isdir(name)判断name是不是一个目录,name不是目录就返回false
os.path.isfile(name)判断name是不是一个文件,不存在返回false
os.path.islink()判断文件是否连接文件,返回boolean
os.path.ismount()指定路径是否存在且为一个挂载点,返回boolean
os.path.samefile()是否相同路径的文件,返回boolean
os.path.getatime()返回最近访问时间 浮点型
os.path.getmtime()返回上一次修改时间 浮点型
os.path.getctime()返回文件创建时间 浮点型
os.path.getsize()返回文件大小 字节单位
os.path.commonprefix(list)返回list(多个路径)中,所有path共有的最长的路径
os.path.lexists路径存在则返回True,路径损坏也返回True
os.path.expanduser(path)把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path)根据环境变量的值替换path中包含的”$name”和”${name}”
os.path.sameopenfile(fp1, fp2)判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2)判断stat tuple stat1和stat2是否指向同一个文件
os.path.splitdrive(path)一般用在windows下,返回驱动器名和路径组成的元组
os.path.walk(path, visit, arg)遍历path,给每个path执行一个函数详细见手册
os.path.supports_unicode_filenames设置是否支持unicode路径名

四、stat模块:描述os.stat()返回的文件属性列表中各值的意义

对象描述
fileStats = os.stat(path)获取到的文件属性列表
fileStats[stat.ST_MODE]获取文件的模式
fileStats[stat.ST_SIZE]文件大小
fileStats[stat.ST_MTIME]文件最后修改时间
fileStats[stat.ST_ATIME]文件最后访问时间
fileStats[stat.ST_CTIME]文件创建时间
stat.S_ISDIR(fileStats[stat.ST_MODE])是否目录
stat.S_ISREG(fileStats[stat.ST_MODE])是否一般文件
stat.S_ISLNK(fileStats[stat.ST_MODE])是否连接文件
stat.S_ISSOCK(fileStats[stat.ST_MODE])是否COCK文件
stat.S_ISFIFO(fileStats[stat.ST_MODE])是否命名管道
stat.S_ISBLK(fileStats[stat.ST_MODE])是否块设备
stat.S_ISCHR(fileStats[stat.ST_MODE])是否字符设置

五、hashlib:

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

复制代码
>>> import hashlib
####### md5 #######
>>> hash.update(bytes('admin',encoding='utf-8'))
>>> print(hash.hexdigest())
21232f297a57a5a743894a0e4a801fc3
>>> print(hash.digest())
b'!#/)zW\xa5\xa7C\x89J\x0eJ\x80\x1f\xc3'
####### sha1 #######
>>> hash = hashlib.sha1()
>>> hash.update(bytes('admin',encoding='utf-8'))
>>> print(hash.hexdigest())
d033e22ae348aeb5660fc2140aec35850c4da997
>>> print(hash.digest())
b'\xd03\xe2*\xe3H\xae\xb5f\x0f\xc2\x14\n\xec5\x85\x0cM\xa9\x97'
####### sha256 #######
>>> hash = hashlib.sha256()
>>> hash.update(bytes('admin',encoding='utf-8'))
>>> print(hash.hexdigest())
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
>>> print(hash.digest())
b'\x8civ\xe5\xb5A\x04\x15\xbd\xe9\x08\xbdM\xee\x15\xdf\xb1g\xa9\xc8s\xfcK\xb8\xa8\x1fo*\xb4H\xa9\x18'
####### sha384 #######
>>> hash = hashlib.sha384()
>>> hash.update(bytes('admin',encoding='utf-8'))
>>> print(hash.hexdigest())
9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2
ec9f10290cdc0782
>>> print(hash.digest())
b'\x9c\xa6\x94\xa9\x02\x85\xc04C,\x95PB\x1b{\x9d\xbd\\\x0fKfs\xf0_m\xbc\xe5\x80R\xba \xe4$\x80A\x95n\xe8\xc9\xa2\xec\x9f\x10)\x0c\xdc\x07\x82'
####### sha512 #######
>>> hash = hashlib.sha512()
>>> hash.update(bytes('admin',encoding='utf-8'))
>>> print(hash.hexdigest())
c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec
>>> print(hash.digest())
b'\xc7\xadD\xcb\xadv*]\xa0\xa4R\xf9\xe8T\xfd\xc1\xe0\xe7\xa5*8\x01_#\xf3\xea\xb1\xd8\x0b\x93\x1d\xd4rcM\xfa\xc7\x1c\xd3N\xbc5\xd1j\xb7\xfb\x8a\x90\xc8\x1f\x97Q\x13\xd6\xc7S\x8d\xc6\x9d\xd8\xde\x90w\xec'
复制代码

以上加密算法虽然非常厉害,但存在缺陷,即:通过密码库可以反解.所以,有必要对加密算法中添加自定义key再来做加密.

复制代码
>>> import hashlib
>>> hash = hashlib.md5(bytes('89oaFs09f',encoding='utf-8'))
>>> hash.update(bytes('admin',encoding='utf-8'))
>>> print(hash.hexdigest())
0f102151d38af213af2d4f73d459d69c
>>> print(hash.digest())
b'\x0f\x10!Q\xd3\x8a\xf2\x13\xaf-Os\xd4Y\xd6\x9c'
复制代码

python内置还有一个hmac模块,它内部对我们创建key和内容进行进一步的处理,然后再加密

复制代码
>>> import hmac
>>> h = hmac.new(bytes('898oaFs09f',encoding='utf-8'))
>>> h.update(bytes('admin',encoding='utf-8'))
>>> print(h.hexdigest())
17186c513df61e8b3fb4a134f474b130
>>> print(h.digest())
b'\x17\x18lQ=\xf6\x1e\x8b?\xb4\xa14\xf4t\xb10'
复制代码

六、random模块:

对象描述
random.random()产生0-1的随机浮点数
random.uniform(a, b)产生指定范围内的随机浮点数
random.randint(a, b)产生指定范围内的随机整数
random.randrange([start], stop[, step])从一个指定步长的集合中产生随机数
random.choice(sequence)从序列中产生一个随机数
random.shuffle(x[, random])将一个列表中的元素打乱
random.sample(sequence, k)从序列中随机获取指定长度的片断
复制代码
import random
checkcode = ''
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)
print(checkcode)
 
随机验证码
复制代码

七、time&datetime&date模块

datetime.date.today()本地日期对象,(用str函数可得到它的字面表示('2016-12-24'))
datetime.date.isoformat(obj)当前[年-月-日]字符串表示('2016-12-24')
datetime.date.fromtimestamp()返回一个日期对象,参数是时间戳,返回 [年-月-日]
datetime.date.weekday(obj)返回一个日期对象的星期数,周一是0
datetime.date.isoweekday(obj)返回一个日期对象的星期数,周一是1
datetime.date.isocalendar(obj) 把日期对象返回一个带有年周星期的元组
datetime.datetime.today()返回一个包含本地时间(含微秒数)的datetime对象,如datetime.datetime(2016, 12, 24, 11, 1, 59, 365506)
datetime.datetime.now()返回指定时区的datetime对象,datetime.datetime(2016, 12, 24, 11, 2, 50, 132996)
datetime.datetime.utcnow()返回一个零时区的datetime对象
datetime.utcfromtimestamp(timestamp)按时间戳返回一个UTC-datetime对象
datetime.datetime.strptime('2014-03-16 12:21:21',"%Y-%m-%d %H:%M:%S")将字符串转为datetime对象,datetime.datetime.strptime('2016-01-01 12:11:12','%Y-%m-%d %X')
datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d  %H:%M:%S')将datetime对象转换为str表示形式
datetime.date.today().timetuple()转换为时间戳datetime元组对象,可用于转换时间戳
datetime.datetime.now().timetuple()转换为时间戳datetime元组对象,可用于转换时间戳
time.mktime(timetupleobj)将datetime元组对象转为时间戳
time.time()当前时间戳
time.localtime当前时间对象
time.gmtime当前UTC时间对象
复制代码
#_*_coding:utf-8_*_
__author__ = 'Alex Li'

import time


# print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来
# print(time.altzone)  #返回与utc时间的时间差,以秒计算\
# print(time.asctime()) #返回时间格式"Fri Aug 19 11:14:16 2016",
# print(time.localtime()) #返回本地时间 的struct time对象格式
# print(time.gmtime(time.time()-800000)) #返回utc时间的struc时间对象格式

# print(time.asctime(time.localtime())) #返回时间格式"Fri Aug 19 11:14:16 2016",
#print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上



# 日期字符串 转成  时间戳
# string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将 日期字符串 转成 struct时间对象格式
# print(string_2_struct)
# #
# struct_2_stamp = time.mktime(string_2_struct) #将struct时间对象转成时间戳
# print(struct_2_stamp)



#将时间戳转为字符串格式
# print(time.gmtime(time.time()-86640)) #将utc时间戳转换成struct_time格式
# print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将utc struct_time格式转成指定的字符串格式





#时间加减
import datetime

# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
#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() + datetime.timedelta(-3)) #当前时间-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分


#
# c_time  = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #时间替换
复制代码

模块详解:http://www.cnblogs.com/fclbky/articles/4098204.html

格式化字符串:strftime() 和 strptime()
date, datetime, 和 time 对象均支持使用 strftime(format) 方法,将指定的日期或时间转换为自定义的格式化字符串
相反的,datetime.strptime() 类方法却是把格式化字符串转换为 datetime 对象

格式化指令含义
%a星期的简写(星期一 ~ 天:Mon, Tue, Wed, Thu, Fri, Sat, Sun)
%A星期的全写(星期一 ~ 天:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
%w在一个星期中的第几天( 0 表示星期天 ... 6 表示星期六)
%d在一个月中的第几天(01, 02, ..., 31)
%b月份的简写(一月 ~ 十二月:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
%B月份的全写(一月 ~ 十二月:January, February, March, April, May, June, July, August, September, October, November, December)
%m月份(01, 02, ..., 12)
%y用两个数字表示年份(例如 2014年 == 14)
%Y用四个数字表示年份
%H二十四小时制(00, 01, ..., 23)
%I十二小时制(01, 02, ..., 11)
%pAM 或者 PM
%M分钟(00, 01, ..., 59)
%S秒(00, 01, ..., 59)
%f微秒(000000, 000001, ..., 999999)
%z与 UTC 时间的间隔 ;如果是本地时间,返回空字符串((empty), +0000, -0400, +1030)
%Z时区名称;如果是本地时间,返回空字符串((empty), UTC, EST, CST)
%j在一年中的第几天(001, 002, ..., 366)
%U在一年中的第几周,星期天作为第一天(00, 01, ..., 53)
%W在一年中的第几周,星期一作为第一天(00, 01, ..., 53)
%c用字符串表示日期和时间(Tue Aug 16 21:30:00 2014)
%x用字符串表示日期(08/16/14)
%X用字符串表示时间(21:30:00)
%%表示百分号
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!