6-time datetime 异常处理 触发异常 os os.path pickle

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'
  • 元组(struct_time):由9个元素组成
>>> 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元组
索引属性
0tm_year2000
1tm_mon1-12
2tm_mday1-31
3tm_hour0-23
4tm_min0-59
5tm_sec0-61
6tm_wday0-6(0表示周一)
7tm_yday(一年中的第几天)1-366
8tm_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)    # 睡眠3秒
>>> time.strftime('%Y-%m-%d %H:%M:%S')   # 转成指定格式
'2019-07-08 09:59:59'
# 字符串时间转成9元组格式
>>> 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对象转成时间字符串
>>> datetime.strftime(t1, '%Y-%m-%d %H:%M:%S')
'2019-07-08 10:55:17'
# 将时间字符串转换成datetime对象
>>> datetime.strptime('2019-07-08 10:55:17', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2019, 7, 8, 10, 55, 17)
# 创建指定时间的datetime对象
>>> 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()   # pwd
>>> os.listdir()  # ls
>>> os.listdir('/tmp')  # ls /tmp
>>> os.makedirs('/tmp/mydemo/mydir')   # mkdir -p
>>> os.mkdir('/tmp/abcde')   # mkdir
>>> os.chdir('/tmp/mydemo/mydir')  # cd /tmp/mydemo/mydir
>>> os.listdir()
[]
>>> os.mknod('hello')   # touch hello
>>> os.listdir()
['hello']
>>> os.symlink('/etc/hosts', 'zhuji')   # ln -s /etc/hosts zhuji
>>> os.chmod('hello', 0o644)   # chmod 644 hello
>>> os.rename('hello', 'welcome')   # mv hello welcome
>>> os.rmdir('/tmp/abcde')    # rmdir /tmp/abcde   只能删空目录
>>> os.unlink('zhuji')   # unlink zhuji   # 删除软链接
>>> os.remove('welcome')   # rm -f 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']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值