OS模块
与操作系统交互
1 | os.sep | 取操作系统的路径分隔符 |
2 | os.name | 操作系统平台。windows下为nt;linux/unix下为posix |
3 | os.environ | 获取环境变量 |
4 | os.getcwd() | 得到当前工作目录,Python脚本工作的目录 |
5 | os.curdir | 返回当前目录 |
6 | os.pardir | 获取当前目录的父目录字符串名 |
7 | os.getenv()/putenv() | 读取和设置环境变量 |
8 | os.listdir() | 返回制定目录下的文件和文件目录 |
9 | os.remove(file) | 删除一个文件 |
10 | os.stat(file) | 获取文件属性 |
11 | os.chmod(file) | 修改文件权限和时间戳 |
12 | os.mkdir(name) | 创建目录 |
13 | os.rmdir(name) | 删除目录 |
14 | os.removedirs() | 删除多个目录 |
15 | os.system() | 运行shell命令 |
16 | os.linesep | 当前平台的行终止符。windows使用'\r\n';linux为'\n'; Mac为 '\r' |
17 | os.makedirs() | 创建多层递归目录 |
18 | os.rename() | 重命名文件或目录 |
19 | os.pathsep | 获取分割文件路径的字符串 |
20 | os.path.abspath(文件路径) | 返回一个文件或目录的绝对路径 |
21 | os.path.split(文件路径) | 将文件分割成目录和文件名二元组返回 |
22 | os.path.dirname(文件路径) | 返回文件的目录 |
23 | os.path.basename(文件路径) | 返回文件最后的文件名。 |
24 | os.path.exists(文件路径) | 文件是否存在 |
25 | os.path.isabs(文件路径) | 文件是否是绝对路径 |
26 | os.path.isfile(文件路径) | 是否是文件 |
27 | os.path.isdir(文件路径) | 是否是目录 |
28 | os.path.join(文件路径) | 将多个字符串路径组合成一个完成的路径返回,第一个绝对路径之前的参数被忽略。 |
29 | os.path.getattime(文件路径) | 返回所指向的文件或目录的最后存取时间戳 |
30 | os.path.getmtime(文件路径) | 返回所指向的文件或目录的最后存取时间戳 |
31 | os.stat().st_size | 检查一个文件的大小,返回字节 |
SYS模块
与python解释器交互
1 | sys.argv | 在外部向程序内部传递参数 |
2 | sys.path | 获取指定模块搜索路径的字符串集合,可以将写 好的模块放到得到的某个路径下,就可以在程序中import时正确找到 |
sys.modules | 是一个全局字典,该字典是python启动后就加载内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再次导入该模块式,python会直接到字典中查找,从而加快程序运行速度。它拥有字典所拥有的一切方法 | |
sys.platform | 显示平台 | |
sys.stdin\stdout\stderr | stdin、stdout、stderr变量包含于标准I/O流对应的流对象,如果需要更好的控制输出,而print不能满足你的要求,它们就是你所需要的。你也可以替换它们,这时候你就可以重定向输出和输入到其它设备,或者以非标准的方式处理 | |
sys.exit(n) | 执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0正常退出,其它为异常) |
hashlib模块
hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5、sha1,、sha224、sha256、sha384、sha512等算法。
hash.digest():返回摘要,作为二进制数据字符串值。
hash.hexdigest():返回摘要,作为十六进制数据字符串值。
hash.copy():复制。
import hashlib
# md5
string = 'admin123'
md5 = hashlib.md5()
md5.update(string.encode('utf8')) # 需要转码, 因为hashlib加密的字符串类型为二进制编码。
result = md5.hexdigest()
print(result)
# sha1
sha1 = hashlib.sha1()
sha1.update(string.encode('utf8'))
result = sha1.hexdigest()
print(result)
# sha256
sha256 = hashlib.sha256()
sha256.update(string.encode('utf8'))
result = sha256.digest()
print(result)
执行结果:
0192023a7bbd73250516f069df18b500 # MD5
f865b53623b121fd34ee5426c792e5c33af8c227 #SHA1
b'$\x0b\xe5\x18\xfa\xbd\'$\xdd\xb6\xf0N\xeb\x1d\xa5\x96tH\xd7\xe81\xc0\x8c\x8f\xa8"\x80\x9ft\xc7 \xa9' #SHA256
time模块
time模块中时间表现格式主要有三种:
- timestamp:时间戳,表示从1970年1月1日0点0分0秒到现在时间的秒数。
- struc_time:时间元组,共有9个元素。
- format time:格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
生成时间戳:
>>> import time
>>> time.time()
1491631287.1797802
>>> #由struct_time生成timestamp
>>> time.mktime(time.localtime())
1491631461.0 #后面始终都是一位小数,0
生成struct_time(时间元组):
>>> # 直接生成时间元组
>>> time.localtime()
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=14, tm_min=7, tm_sec=20, tm_wday=5, tm_yday=98, tm_isdst=0)
>>> # 把时间戳转换为时间元组
>>> time.localtime(time.time())
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=14, tm_min=8, tm_sec=5, tm_wday=5, tm_yday=98, tm_isdst=0)
>>> #把localtime()换为gmtime() 就表示格林威治时间
>>>
>>> #把格式化时间转换为时间元组
>>> time.strptime('2017-4-8 14:12:12','%Y-%m-%d %X')
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=14, tm_min=12, tm_sec=12, tm_wday=5, tm_yday=98, tm_isdst=-1)
>>> time.strptime('2017-4-8','%Y-%m-%d')
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=98, tm_isdst=-1)
属性 | 值 |
---|---|
tm_year | 2017 |
tm_mon | 1-12 |
tm_mday | 1-31 |
tm_hour | 0-23 |
tm_min | 0-59 |
tm_sec | 0-59 |
tm_wday(weekday) | 0-6(0表示周日) |
tm_yday(一年中的第几天) | 1-366 |
tm_isdst(是否是夏令时) | 默认为-1 |
生成format_time(格式化时间):
>>> # 直接生成format_time
>>> time.strftime('%Y-%m-%d %X')
'2017-04-08 14:16:11'
>>>
>>> #把struct_time转换为format_time
>>> time.strftime('%Y-%m-%d %X',time.localtime())
'2017-04-08 14:17:30'
>>>
%Y 年 Year with century as a decimal number.
%m 月 Month as a decimal number [01,12].
%d 日 Day of the month as a decimal number [01,31].
%H 时 Hour (24-hour clock) as a decimal number [00,23].
%M 分 Minute as a decimal number [00,59].
%S 秒 Second as a decimal number [00,61].
%z Time zone offset from UTC.
%a 周几简写(英文Sun) Locale's abbreviated weekday name.
%A 周几全名(英文Sunday) Locale's full weekday name.
%b 月份简写(英语Apr) Locale's abbreviated month name.
%B 月份全名(英语April) Locale's full month name.
%c Locale's appropriate date and time representation.
%I 十二小时制小时数 Hour (12-hour clock) as a decimal number [01,12].
%p AM/PM Locale's equivalent of either AM or PM.
%X 本地相应时间
%x 本地相应日期
生成固定时间格式:
>>> time.asctime()
'Sat Apr 8 14:20:04 2017'
>>>
>>> time.ctime()
'Sat Apr 8 14:20:09 2017'
>>>
>>> time.asctime(time.localtime())
'Sat Apr 8 14:20:27 2017'
>>>
>>> time.ctime(time.time())
'Sat Apr 8 14:20:44 2017'
时间加减
>>>
>>> #timestamp加减是以秒为单位
>>> import time
>>> t1 = time.time()
>>> t2 = t1 + 10
>>> t1
1491634614.3497803
>>> t2
1491634624.3497803
>>>
time.sleep(seconds):休眠一段时间。
datetime模块
datetime重新封装了time模块,提供了更多接口。提供的类有:date、time、datetime、timedelta、tzinfo。
- date类
- datetime.date(year, month, day)
- date.max、date.min:date对象所能表示的最大、最小日期
- date.resolution:date对象表示日期的最小单位。这里是天
- date.today():返回一个表示当前本地日期的date对象
- date.fromtimestamp(timestamp):根据给定的时间戳返回date对象
>>> import datetime >>> datetime.date.max datetime.date(9999, 12, 31) >>> datetime.date.min datetime.date(1, 1, 1) >>> datetime.date.resolution datetime.timedelta(1) >>> datetime.date.today() datetime.date(2017, 4, 8) >>> datetime.date.fromtimestamp(time.time()) datetime.date(2017, 4, 8)
from datetime import date d1 = date(2017,4,8) #date对象(年月日都不能是以0开头 (2017,04,08)错误 ) >>> d1 = datetime.date(2017,4,8) >>> d1 datetime.date(2017, 4, 8) >>> d1.year >>> d1.month >>> d1.day >>> d1.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变) >>> d2 = d1.replace(2017,3,20) >>> d1 datetime.date(2017, 4, 8) >>> d2 datetime.date(2017, 3, 20) >>> d1.timetuple():返回日期对应的time.struct_time对象; >>> d1.timetuple() time.struct_time(tm_year=2017, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=98, tm_isdst=-1) >>> d1.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; >>> d1.weekday() #周六 >>> d1.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推; >>> d1.isoweekday() #周六 weekday镜像? >>> d1.isocalendar():返回格式如(year,sum_week,day)的元组; >>> d1 datetime.date(2017, 4, 8) >>> d1.isocalendar() (2017, 14, 6) #第一个是2017年, 14是 当前为今年的第14周 6 表示 第14周结束后过了6天(当前是15周) >>> d1.isoformat():返回格式如'YYYY-MM-DD’的字符串; >>> d1.isoformat() '2017-04-08' >>> d1.strftime(fmt):和time模块format相同。 >>> d1.strftime('%Y-%m-%d') '2017-04-08' >>>
- datetime.date(year, month, day)
- time类
time.min、time.max:time类所能表示的最小、最大时间 >>> import datetime >>> datetime.time.min datetime.time(0, 0) >>> datetime.time.max datetime.time(23, 59, 59, 999999) >>> time.resolution:时间的最小单位,这里是1微秒; >>> datetime.time.resolution datetime.timedelta(0, 0, 1) #秒,毫秒,微秒 >>>
t1 = datetime.time(10,23,15, 100) #time对象 时,分,秒... t1.hour、t1.minute、t1.second、t1.microsecond:时、分、秒、微秒; >>> t = datetime.time(15,30,20, 200) >>> t datetime.time(15, 30, 20, 200) >>> t.hour >>> t.minute >>> t.second >>> t.microsecond >>> t1.tzinfo:时区信息; t1.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性 (原有对象仍保持不变); t1.isoformat():返回型如"HH:MM:SS"格式的字符串表示; t1.strftime(fmt):同time模块中的format;
- datetime类
datetime相当于date和time结合起来。
datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )datetime.today():返回一个表示当前本地时间的datetime对象; datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间; datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间 datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息; datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象; datetime.combine(date, time):根据date和time,创建一个datetime对象; datetime.strptime(date_string, format):将格式字符串转换为datetime对象;
dt=datetime.now()#datetime对象 dt.year、month、day、hour、minute、second、microsecond、tzinfo: dt.date():获取date对象; dt.time():获取time对象; dt. replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]): dt. timetuple () dt. utctimetuple () dt. toordinal () dt. weekday () dt. isocalendar () dt. isoformat ([ sep] ) dt. ctime ():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple())); dt. strftime (format)
- timedelta类
使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。>>> import datetime >>> d = datetime.datetime.now() >>> d datetime.datetime(2017, 4, 8, 15, 42, 1, 656144) 8 >>> d1 = d + datetime.timedelta(days=-1) #昨天 >>> d1 datetime.datetime(2017, 4, 7, 15, 42, 1, 656144) >>> d2 = d - datetime.timedelta(days=1) #昨天 >>> d2 datetime.datetime(2017, 4, 7, 15, 42, 1, 656144) >>> d3 = d + datetime.timedelta(days=1) #明天 >>> d3 datetime.datetime(2017, 4, 9, 15, 42, 1, 656144) >>>
- tzinfo类
from datetime import datetime, tzinfo,timedelta
"""
tzinfo是关于时区信息的类
tzinfo是一个抽象类,所以不能直接被实例化
"""
class UTC(tzinfo):
"""UTC"""
def __init__(self,offset = 0):
self._offset = offset
def utcoffset(self, dt):
return timedelta(hours=self._offset)
def tzname(self, dt):
return "UTC +%s" % self._offset
def dst(self, dt):
return timedelta(hours=self._offset)
# 北京时间
beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
print "beijing time:",beijing
# 曼谷时间
bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
print "bangkok time",bangkok
# 北京时间转成曼谷时间
print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))
# 计算时间差时也会考虑时区的问题
timespan = beijing - bangkok
print "时差:",timespan
# Output==================
北京时间: 2020-10-10 00:00:00+08:00
曼谷时间: 2020-10-10 00:00:00+07:00
beijing time to bangkok time: 2020-10-09 23:00:00+07:00
时差: -1 day, 23:00:00