time模块
时间表示方式
- 时间戳timestamp:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
>>> import time
>>> time.time()
- UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时
>>> time.ctime()
'Mon Jul 8 09:47:54 2019'
>>> time.localtime()
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=9, tm_min=49, tm_sec=5, tm_wday=0, tm_yday=189, tm_isdst=0)
>>> t = time.localtime()
>>> t.tm_year
2019
>>> t.tm_hour
9
struct_time元组
索引 | 属性 | 值 |
---|
0 | tm_year | 2000 |
1 | tm_mon | 1-12 |
2 | tm_mday | 1-31 |
3 | tm_hour | 0-23 |
4 | tm_min | 0-59 |
5 | tm_sec | 0-61 |
6 | tm_wday | 0-6(0表示周一) |
7 | tm_yday(一年中的第几天) | 1-366 |
8 | tm_isdst(是否为dst时间) | 默认为-1 |
time模块方法
- time.localtime([secs]):将一个时间戳转换为当前
时区的struct_time。secs参数未提供,则以当前时
间为准 - time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time
- time.time():返回当前时间的时间戳
- time.mktime(t):将一个struct_time转化为时间戳
- time.sleep(secs):线程推迟指定的时间运行。单位为秒
- time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:‘Sun Jun 2023:21:05 1993’。如果没有参数,将会将time.localtime()作为参数传入
- time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式
- time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()
- time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
时间样式
格式 | 含义 | 格式 | 含义 |
---|
%a | 本地简化星期名称 | %m | 月份(01 - 12) |
%A | 本地完整星期名称 | %M | 分钟数(00 - 59) |
%b | 本地简化月份名称 | %p | 本地am或者pm的相应符 |
%B | 本地完整月份名称 | %S | 秒(01 - 61) |
%c | 本地相应的日期和时间 | %U | 一年中的星期数(00– 53,星期日是一个星期的开始) |
%d | 一个月中的第几天(01 - 31) | %w | 一个星期中的第几天(0- 6,0是星期天) |
%H | 一天中的第几个小时(24小时制,00 - 23) | %x | 本地相应日期 |
%I | 第几个小时(12小时制,01-12) | %X | 本地相应时间 |
%j | 一年中的第几天(001 - 366) | %y | 去掉世纪的年份(00 - 99) |
%Z | 时区的名字 | %Y | 完整的年份 |
>>> time.sleep(3)
>>> time.strftime('%Y-%m-%d %H:%M:%S')
'2019-07-08 09:59:59'
>>> time.strptime('2019-07-08 09:59:59', '%Y-%m-%d %H:%M:%S')
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=9, tm_min=59, tm_sec=59, tm_wday=0, tm_yday=189, tm_isdst=-1)
datetime模块
datetime模块方法
- datetime.today():返回一个表示当前本地时间的datetime对象
- datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间
- datetime.strptime(date_string, format):将格式字符串转换为datetime对象
- datetime.ctime(datetime对象):返回时间格式字符串
- datetime.strftime(format):返回指定格式字符串
>>> import datetime
>>> t1 = datetime.datetime.now()
>>> t1
datetime.datetime(2019, 7, 8, 10, 54, 25, 922956)
>>> from datetime import datetime
>>> t1 = datetime.now()
>>> t1
datetime.datetime(2019, 7, 8, 10, 55, 17, 81886)
>>> t1.year, t1.month, t1.day, t1.hour, t1.minute, t1.second, t1.microsecond
(2019, 7, 8, 10, 55, 17, 81886)
>>> t1.year
2019
>>> datetime.strftime(t1, '%Y-%m-%d %H:%M:%S')
'2019-07-08 10:55:17'
>>> datetime.strptime('2019-07-08 10:55:17', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2019, 7, 8, 10, 55, 17)
>>> t = datetime(2019, 7, 8)
>>> t
datetime.datetime(2019, 7, 8, 0, 0)
时间计算
- 使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算
如100天零4小时前、100天零4小时后是什么时候
>>> from datetime import datetime, timedelta
>>> dt = timedelta(days=100, hours=4)
>>> t = datetime.now()
>>> t
datetime.datetime(2019, 7, 8, 11, 38, 13, 922027)
>>> t - dt
datetime.datetime(2019, 3, 30, 7, 38, 13, 922027)
>>> t + dt
datetime.datetime(2019, 10, 16, 15, 38, 13, 922027)
异常处理
什么是异常
- 当python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常
- 异常是因为程序出现了错误而在正常控制流以外采取的行为
- 这个行为又分为两个阶段:
– 首先是引起异常发生的错误
– 然后是检测(和采取可能的措施)阶段
python中的异常
程序遇到错误时,如果没有相应的处理代码,将会崩溃、终止执行。
- 当程序运行时,因为遇到未解的错误而导致中止运行,便会出现traceback消息,打印异常
异常 | 描述 |
---|
NameError | 未声明/初始化对象 |
IndexError | 序列中没有没有此索引 |
SyntaxError | 语法错误 |
KeyboardInterrupt | 用户中断执行 |
EOFError | 没有内建输入,到达EOF标记 |
IOError | 输入/输出操作失败 |
try-except语句
- 异常处理就是把有可能发生异常的语句发到try中去执行,用except捕获发生的异常。完整的语法是:
- 可以把多个except语句连接在一起,处理一个try块中可能发生的多种异常
try:
有可能发生异常的语句
except 异常名字:
处理异常的代码
else:
不发生异常才执行的代码
finally:
不管异常是否发生,都要执行的代码
异常参数
- 异常也可以有参数,异常引发后它会被传递给异常处理器
- 当异常被引发后参数是作为附加帮助信息传递给异常处理器的
>>> try:
... 10 / 0
... except ZeroDivisionError as e:
... print('error', e)
...
error division by zero
else子句
- 在try范围中没有异常被检测到时,执行else子句
- 在else范围中的任何代码运行前,try范围中的所有代码必须完全成功
>>> try:
... result = 100 / int(input("number: "))
... except Exception as e:
... print('Error:', e)
... else:
... print(result)
...
number: 10
10.0
finally子句
- finally子句是无论异常是否发生,是否捕捉都会执行的一段代码
- 如果打开文件后,因为发生异常导致文件没有关闭,可能会发生数据损坏。使用finally可以保证文件总是能正常的关闭
触发异常
raise语句
- 要想引发异常,最简单的形式就是输入关键字raise,后面跟要引发的异常的名称
- 执行raise语句时,Python会创建指定的异常类的一个对象
- raise语句还可指定对异常对象进行初始化的参数
assert 断言
- 断言是一句必须等价于布尔值为真的判定
- 此外,发生异常也意味着表达式为假
>>> assert 10 > 100, "Wrong"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: Wrong
os模块
os模块简介
- 对文件系统的访问大多通过python的os模块实现
- 该模块是python访问操作系统功能的主要接口
- 有些方法,如copy等,并没有提供,可以使用shutil模块作为补充
os模块方法
函数 | 作用 |
---|
symlink() | 创建符号链接 |
listdir() | 列出指定目录的文件 |
getcwd() | 返回当前工作目录 |
mkdir() | 创建目录 |
chmod() | 改变权限模式 |
getatime() | 返回最近访问时间 |
chdir() | 改变工作目录 |
>>> import os
>>> os.getcwd()
>>> os.listdir()
>>> os.listdir('/tmp')
>>> os.makedirs('/tmp/mydemo/mydir')
>>> os.mkdir('/tmp/abcde')
>>> os.chdir('/tmp/mydemo/mydir')
>>> os.listdir()
[]
>>> os.mknod('hello')
>>> os.listdir()
['hello']
>>> os.symlink('/etc/hosts', 'zhuji')
>>> os.chmod('hello', 0o644)
>>> os.rename('hello', 'welcome')
>>> os.rmdir('/tmp/abcde')
>>> os.unlink('zhuji')
>>> os.remove('welcome')
os.path子模块
>>> os.path.abspath('.')
'/tmp/mydemo/mydir'
>>> os.path.split('/tmp/demo/abc.txt')
('/tmp/demo', 'abc.txt')
>>> os.path.dirname('/tmp/demo/abc.txt')
'/tmp/demo'
>>> os.path.basename('/tmp/demo/abc.txt')
'abc.txt'
>>> os.path.join('/tmp/demo', 'abc.txt')
'/tmp/demo/abc.txt'
>>> os.path.isdir('/etc')
True
>>> os.path.isfile('/etc/hosts')
True
>>> os.path.islink('/etc/passwd')
False
>>> os.path.ismount('/')
True
>>> os.path.exists('/abcd')
False
pickle模块
pickle模块简介
- 把数据写入文件时,常规的文件方法只能把字符串对象写入。其他数据需先转换成字符串再写入文件 。
- python提供了一个标准的模块,称为pickle。使用它可以在一个文件中储存任何python对象,之后又可以把它完整无缺地取出来
pickle模块方法 - 分别调用dump()和load()可以存储、写入
>>> import pickle as p
>>> shoplistfile = 'shoplist.data'
>>> shoplist = ['apple', 'mango', 'carrot']
>>> f = file(shoplistfile, 'wb')
>>> p.dump(shoplist, f)
>>> f.close()
>>>
>>> f = file(shoplistfile)
>>> storedlist = p.load(f)
>>> print storedlist
['apple', 'mango', 'carrot']
- 当写入文件时,只能写入字符串,写入其他类型的数据,就会报错:
>>> f = open('/tmp/abc.txt', 'w')
>>> f.write('hello world!\n')
13
>>> f.write(100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: write() argument must be str, not int
- pickle模块可以把任意的数据类型写到文件中,还能无损地取出。
>>> import pickle
>>> shopping_list = ['apple', 'banana', 'orage']
>>> with open('/tmp/shop.data', 'wb') as fobj:
... pickle.dump(shopping_list, fobj)
>>> import pickle
>>> with open('/tmp/shop.data', 'rb') as fobj:
... mylist = pickle.load(fobj)
...
>>> type(mylist)
<class 'list'>
>>> mylist
['apple', 'banana', 'orage']