python内置模块[sys,os,os.path,stat]
内置模块是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_names | Python解释器导入的内建模块列表 |
sys.executable | Python解释程序路径 |
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) |
%p | AM 或者 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) |
%% | 表示百分号 |