- 可对date、time、datetime三种时间模式进行单独管理
datetime.date() 处理日期(年月日)
datetime.time() 处理时间(时分秒、毫秒)
datetime.datetime() 处理日期+时间
datetime.timedelta() 处理时段(时间间隔) - 获取当前时间
〉获取今天的日期
datetime.date.today()
datetime.datetime.now()
〉修改日期格式
使用strftime格式化
datetime.datetime.isoformat()
import datetime
datetime.date.today()
datetime.date(2022, 7, 20)
datetime.date.today().strftime('%Y-%m-%d %H:%M:%S')
'2022-07-20 00:00:00'
d = datetime.datetime.now()
d
datetime.datetime(2022, 7, 20, 20, 42, 57, 132554)
d.isoformat()
'2022-07-20T20:42:57.132554'
- 时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数
- 将日期转换成时间戳
timetuple函数
将时间转换成struct_time格式
time.mktime函数
返回用秒数来表示时间的浮点数 - 将时间戳转换成日期
datetime.date.fromtimestamp()
import time,datetime today = datetime.date.today() today.timetuple() time.struct_time(tm_year=2022, tm_mon=7, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=201, tm_isdst=-1) time.mktime(today.timetuple()) 1658246400.0 datetime.date.fromtimestamp(1658246400.0) datetime.date(2022, 7, 20)
- 时间上的加减法
timedelta()方法
表示两个时间点的间隔
import datetime today = datetime.datetime.now() yesterday = today - datetime.timedelta(days=1) print(yesterday) 2022-07-19 20:51:43.275831 hours = today - datetime.timedelta(hours=1) print(hours) 2022-07-20 19:51:43.275831(二)calendar模块
- 制作电子日历
〉 calendar模块
跟日历相关的若干函数和类,可以生成文本形式的日历
〉 常用函数
calendar.calendar(<年>)
calendar.month(<年>,<月>)
calendar.prmonth(<年>,<月>)
calendar.prcal(<年>) - 制作电子日历:一个月
calendar.month(<年>,<月>)
返回多行字符串
calendar.prmonth(<年>,<月>)
相当于print (calendar.month (<年>,<月>))
import calendar
calendar.month(2020,11)
' November 2020nMo Tu We Th Fr Sa Sun
1n 2 3 4 5 6 7 8n
9 10 11 12 13 14 15n
16 17 18 19 20 21 22n
23 24 25 26 27 28 29n30n'
print(calendar.month(2020,11))
November 2020
Mo Tu We Th Fr Sa Su
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
- 制作电子日历:一整年
calendar.calendar(<年>)
返回多行字符串
calendar.prcal(<年>)
相当于print (calendar.prcal (<年>)) - 将日历列表化
〉 calendar.monthcalendar()
返回某一年的某一个月份日历,是一个嵌套列表
最里层的列表含有七个元素(列表的0-6),代表一周(从周一到周日)
如果没有本月的日期,则为0
import calendar calendar.monthcalendar(2020,11) [[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22], [23, 24, 25, 26, 27, 28, 29], [30, 0, 0, 0, 0, 0, 0]]
- 与日历相关的计算
〉 判别闰年
普通闰年:能被4整除但不能被100整除的年份
世纪闰年:能被400整除的年份
calendar.isleap(<年>)(返回true or false) - 与日历相关的计算
〉 计算某月共有多少天,从周几开始
从0开始,依次为周一、周二…
〉 计算某天是周几
返回值为0~6,依次对应的是周一到周日
calendar.monthrange(2020,11) (6, 30) calendar.weekday(2020,11,7) 5(三)time模块
- 获取时间戳
〉 time.time()方法
〉 时间戳的用处 (可以用来计时)
import time
t1 = time.time()
a = 0
for i in range(n):
a += i
print(a)
t2 = time.time()
print(t2-t1)
-
获取日期格式
〉 获取当前时间
time.asctime()
time.ctime()
out:‘Mon Aug 13 16:01:27 2018’
〉 将元组数据转化为日期
t = (2018, 8, 13, 11, 42, 31, 0, 0, 0)(年月日时分秒等)
time.asctime(t)
out:‘Mon Aug 13 11:42:31 2018’
这一系列的数值分别对应年、月、日、时、 分、秒、周几、一年中的第几天、是否为夏令时间。 -
利用索引获取时间信息
〉 struct_time类
time.localtime()(得到下面所有)
Out:time.struct_time(tm_year=2018, tm_mon=8, tm_mday=13, tm_hour=12,
tm_min=24, tm_sec=11, tm_wday=0, tm_yday=225, tm_isdst=0)
〉 索引获取时间信息
t = time.localtime()
year = t[0]
out:2018 -
让程序睡一会
〉 让程序运行到某处便暂停几秒
time.sleep()
〉 math模块支持整数、浮点数运算
math.sin() / math.cos() / math.tan()
math.pi Π = 3.14159…
math.log(x,a) 以a为底的x的对数
math.pow(x,y) x的y次方
〉 cmath模块支持复数运算
cmath.polar() 极坐标
cmath.rect() 笛卡尔坐标
cmath.exp(x) e的x次方
cmath.log(x,a) 以a为底的x的对数
cmath.log10(x) 以10为底x的对数
cmath.sqrt(x) x的平方根
〉 小数-固定精度的浮点值
0.1+0.1+0.1-0.3=5.551115123125783e-17
〉 生成小数
from decimal import Decimal
Decimal(‘0.1’)(具有定点精度的十进制数)
〉 小数计算
Decimal(‘0.1’)+Decimal(‘0.1’)+Decimal(‘0.1
0’)-Decimal(‘0.3’)
Out:Decimal(‘0.00’)
〉 分数-实现了一个有理数对象
〉 生成分数
from fractions import Fraction
Fraction(1,4)/Fraction(‘0.25’)
〉 浮点数转换为分数
Fraction.from_float(1.75)
尽管可以把浮点数转换为分数,在某些情况下,这么做会有不可避免的精度损失,因为这个数字在其最初的浮点形式上是不精确的
〉 伪随机数
计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可预见的
〉 随机数种子
随机种子相同,随机数的序列也是相同的
random.seed(a=None)
〉 random(),生成范围在[0,1)之间的随机实数
〉 uniform(),生成指定范围的内的随机浮点数
〉 randint(m,n),生成指定范围[m,n]内的整数
〉 randrange(a,b,n), 可 以 在 [a,b)范围内,按n递增的集合中随机选择一个数
〉 getrandbits(k),生成k位二进制的随机整数
〉 choice(),从指定序列中随机选择一个元素
〉 sample(),能指定每次随机元素的个数
〉 shuffle(),可以将可变序列中所有元素随机排序
注意:每个前面都要加random.
- 对象持久化
〉 临时性对象
类创建的对象并不是真正的数据库记录存储在内存而不是文件中
关闭python,实例将消失
〉 对象持久化
对象在创建它们的程序退出之后依然存在
构造数据库 - shelve模块
提供基本的存储操作,通过构造一个简单的数据库, 像操作字典一样按照键存储和获取本地的Python对象,使其可以跨程序运行而保持持久化
〉 键
必须是字符串,且是唯一的
〉 值
任何类型的Python对象
〉 与字典类型的区别
一开始必须打开shelve,并且在修改后需要关闭它
〉 数据处理
不支持类似SQL的查询工具
但只要通过键获取到保存在文件的对象,就可以像正常的数据对象一样处理 - 常用操作
〉 将任何数据对象,保存到文件中去
d = shelve.open(filename)
open函数在调用时返回一个shelf对象,通过该对象可以存储内容
〉 类似字典形式访问,可读可写
d[key] = data
value = d[key]
del d[key]
〉 操作完成后,记得关闭文件
d.close()
- 文件的打开
〉 普通文件
数据持久化的最简单类型
仅仅是在一个文件名下的字节流,把数据从文件读入内存,从内存写入文件
〉 open()函数
f = open(filename[,mode[,buffering]])
f: open()返回的文件对象
filename:文件的字符串名
mode:可选参数,打开模式和文件类型
buffering: 可选参数,文件的缓冲区,默认为-1 - 文件的打开模式
〉 mode第一个字母表明对其的操作:
‘r’表示读模式
‘w’表示写模式
‘x’表示在文件不存在的情况下新创建并写文件
‘a’表示在文件末尾追加写内容
‘+’表示读写模式
〉 mode第二个字母是文件类型
l ‘t’表示文本类型
l ‘b’表示二进制文件 - 文件的读写和访问
〉 文件的写操作
f.write(str)
f.writelines(strlist):写入字符串列表
〉 文件的读操作
f.read()
f.readline():返回一行
f.readlines():返回所有行、列表 - 文件的关闭
〉 文件打开后要记得关闭
关闭的作用是终止对外部文件的连接,同时将缓存区的数据刷新到硬盘上
〉 调用close()方法
f.close()
〉 使用上下文管理器(contextmanager)
确保在退出后自动关闭文件
with open(‘textfile’,’rt’) as myfile:
myfile.read()
- 纯文本文件,以“,”为分隔符
值没有类型,所有值都是字符串
不能指定字体颜色等样式
不能指定单元格的宽高,不能合并单元格
没有多个工作表
不能嵌入图像图表 - 文件读取 -reader
re = csv.reader()
接受一个可迭代对象(比如csv文件),能返回一个生成器,可以从其中解析出内容(可用迭代循环读出来) - 文件读取 -DictReader
re = csv.DictReader()
与reader类似
但返回的每一个单元格都放在一个元组的值内 - 文件写操作
w = csv.writer()
w.writerow(rows)
当文件不存在时,自动生成
支持单行写入和多行写入 - 字典数据写入
w = csv.DictWriter()
w.writeheader()
w.writerow(rows)
- openpyxl模块
用来读写扩展名为xlsx/xlsm/xltx/xltm的文件
Workbook类是对工作簿的抽象
Worksheet类是对表格的抽象
Cell类是对单元格的抽象文件写操作 - 操作之前先导入第三方库
安装: pip install openpyxl
导库: from openpyxl import workbook - 创建Excel文件
一个Workbook对象代表一个Excel文档,使用该方法创建一个Worksheet对象后才能打开一个表
from openpyxl import Workbook
wb = Workbook()
ws = wb.active - 读取Excel文件
from openpyxl import load_workbook
wb = load_workbook(filename)
ws = wb.file.active - 获取单元格信息
获取Cell对象
c = wb[‘sheet’][‘A1’]
c = wb[‘sheet’].cell(row=1,column=1)
c.coordinate : 返回单元格坐标
c.value : 返回单元格的值
c.row : 返回单元格所在的行坐标
c.column : 返回单元格所在列坐标
- 轻松处理pdf文件的库 –PyPDF2
包含了PdfFileReader、PdfFileMerger、PageObject和PdfFileWriter四个主要类
能进行读写、分割、合并、文件转换等多种操作
只能从PDF文档中提取文本并返回为字符串,而无法提取图像、图表或其他媒体 - 读取PDF文件
readFile = open(‘test.pdf’,‘rb’)
pdfFileReader = PdfFileReader(readFile) - pdfFileReader类
.getNumPages():计算PDF文件总页数
.getPage(index):检索指定编号的页面 - PDF文件的写操作
writeFile = ‘output.pdf’
pdfFileWriter = PdfFileWriter() - pdfFileWriter类
.addPage(pageObj):根据每页返回的PageObject,写入到文件
.addBlankPage():在文件的最后一页后面写入一个空白页,保存到新文件 - 合并多个文档
pdf_merger = PdfFileMerger()
pdf_merger.append(‘python2018.pdf’)
pdf_merger.merge(20, ‘insert.pdf’)
pdf_merger.write(‘merge.pdf’) - 单个页面操作 –PageObject类
.extractText():按照顺序提取文本
.getContents():访问页面内容
.rotateClockwise(angle):顺时针旋转
.scale(sx,sy):改变页面大小



