dodo

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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)
%% 表示百分号
posted on 2016-12-23 20:02  dodo‘s  阅读(3157)  评论(0编辑  收藏  举报