您的位置:首页 > 编程语言 > Python开发

MOOC —— Python语言基础与应用 by 北京大学 第七章 基本扩展模块

2019-01-29 13:26 781 查看

第七章 基本扩展模块

33、datetime模块

datetime.date():处理日期(年月日)
datetime.time():处理时间(时分秒、毫秒)
datetime.datetime():处理日期+时间
datetime.timedelta(days=1,hours=1):时间偏移量,处理时段(时间间隔),做时间运算用
datetime.date.today():获取今天的日期
datetime.datetime.now():当前时间
用strftime格式化

datetime.date.today().strftime('%Y-%m-%d %H:%M:%S)

datetime.datetime.isoformat():用国际标准格式来显示时间
timetuple:将时期转换成时间戳,struct_time格式
time.mktime:返回用秒数来表示时间的浮点数
datetime.date.fromtimestamp():将时间戳转换成日期
timedelta():表示两个时间点的间隔

34、calendar模块

常用函数
calendar.calendar(<年>):以多行字符串的形式输出年历
calendar.month(<年>,<月>):以多行字符串的形式输出月历
calendar.prmonth(<年>,<月>):= print(calendar.month(<年>,<月>))
calendar.prcal(<年>) := print(calendar.calendar(<年>))
calendar.monthcalendar():返回一个嵌套列表,里面列表元素含有7个元素,代表一周
calendar.isleap(<年>):判断是否闰年(以前的练习用了这个就好方便了= =)
calendar.monthrange(<年>,<月>):计算某年某月第一天是周几,共多少天,周一返回0,周二返回1,依次类推
calendar.weekday(<年>,<月>,<日>):计算指定一天是星期几

35、time模块

更多用在程序里的计时
time.time():主要用来计算时间差
time.asctime():获取当前时间,还可以将元组数据转化为日期
time.ctime():获取当前时间,同上
time.localtime():获取本地时间
time.sleep():让程序暂停几秒

36、几个算术模块

这些高大上的模块。。。对数学都还给老师的我来说,帮大忙了= =
math
math.sin() / cos() /tan() / pi / log(x,a) / pow(x,y)

cmath
主要用于复数运算
cmath.polar():极坐标
cmath.rect():笛卡尔坐标
cmath.exp(x):e的x 次幂
cmath.log(x,a):a为底,x的对数
cmath.sqrt(x):平方根

decimal
主要用于解决浮点数运算的误差
from decimal import Decimal
Decimal(‘0.1’)

fractions 分数
from fractions import Fraction
Fraction(‘0.25’) ==> Fraction(1, 4)
Fractioni.from_float(1.75):浮点数转换为分数

random
伪随机数,按照一定算法模拟产生,结果是确定的
random.seed(a=None),随机数种子
random():生成范围[0,1)的随机实数,不含1
uniform():生成指定范围内的随机浮点数
randint(m,n):生成[m,n]内的整数,包括n
randrange(a,b,n):在[a,b)范围内,按n递增的集合中随机选择一个数
getrandbits(k):生成k位二进制的随机整数
choice():从指定序列中随机选择一个元素
sample(list,n):指定每次随机抽取list列表里元素的个数n
shuffle():可变序列里的元素随机排序

37、持久化模块

让一些数据在程序退出来后,依然保存
pickle
任意python对象格式化和解格式化
dbm
实现一个可通过键访问的文件系统,以存储字节串
shelve
按照键把pickle处理后的对象存储到一个文件中
键(key)必须是字符串,且是唯一的
必须打开shelve,修改后需要关闭
不支持类似sql的查询工具

d = shelve.open(filename)        # 打开
d[key] = data                    # 像字典一样操作
value = d[key]
del d[key]
d.close()                        #关闭
38、文件文本读写模块

open(filename[,mode=‘rwxa+tb’[,buffering=-1]]):打开文件

write(): 文件写操作
writelines():同样是写,但括号里输入的是列表

read():读,默认全部
readline():读,默认一行
readlines():读,默认全部,返回列表,一个列表是一行

close():关闭文件
确保在退出后自动关闭文件
with open(‘textfile’,‘rt’) as myfile:
myfile.read()

结构化文本文件:CSV
re = csv.reader():返回一个生成器
re = csv.Dictreader():带有表头的读取,返回的每一个单元格都放在一个元组的值内

文件写操作
w = csv.writer()
w.writerow(rows)

字典数据写入
w = csv.DictWriter()
w.writeheader()
w.writerow(rows)

结构化文本文件:Excel
openpyxl模块
用来读写xlsx.xlsm.xltx.xltm的文件

创建excel文件

from openpyxl import Workbook
wb = Workbook()
ws =wb.active

读取excel文件

from openpyxl import load_workbook
wb = load_workbook(filename)
ws = wb.file.active

获取单元格信息
c = wb[‘sheet’]['A1‘]
c = wb[‘sheet’].cell(row=1,column=1)
c.coordinate:返回单元格坐标
c.value:返回单元格的值
c.row:返回单元格所在的行坐标
c.column:返回单元格所在列坐标

结构化文本文件:PDF
处理pdf的库:PyPDF2,只能提取文本,无法提取图像,图表等
主要类:

  • PdfFileReader:读取

    .getNumPages():计算PDF文件总页数
  • .getPage(index):检索指定编号的页面
  • PdfFileWriter:写

      .addPage(pageObj):根据每页返回的PageObject,写入到文件
    • .addBlankPage():在文件的最后一页后面写入一个 空白页,保存到新文件
  • PdfFileMerger:合并文档

      .append
    • .merge
    • .write
  • PageObject:

      .extractText():按照顺序提取文本
    • .getContents():访问页面内容
    • .rotateClockwise(angle):顺时针旋转
    • .scale(sx,sy):改变页面大小
    39、上机练习:计时和文件处理

    一、看看阶乘累加(n=1~100)各需要多 长时间?

    from math import factorial
    from time import time
    for i in range(1,101):
    t1=time()
    factorial(i)
    t2=time()
    print(t2-t1)

    二、将一篇文章写入一个文本文件

    file1 = open('test.txt', 'w')
    file1.writelines(['静夜思\n', '李白\n',
    '床前明月光,\n', '疑似地上霜。\n',
    '举头望明月,\n', '低头思故乡。\n'])
    file1.close()

    三、读出文本文件,统计单词数输出

    file = open('hamlet.txt', 'r')
    txt = file.read().lower()
    
    for i in "!@#$%^&*()~:,.';{}[]|/?-<>":			# 把标点都去掉
    txt = txt.replace(i, ' ')
    
    newtxt = txt.split()			  				# 变成单词的列表
    counts = {}										# 创建字典
    for word in newtxt:
    counts[word] = counts.get(word, 0) + 1		# 遍历newtxt里的单词,没有就创建,有的就加1
    
    items = list(counts.items())					# 将字典的元素变成列表
    items.sort(key=lambda x: x[1], reverse=True)	# 根据元素的X[1]的值排序
    
    for i in range(10):
    word, count = items[i]						# 输出频率最高的10个词
    print("{0:<10}{1:>5}".format(word, count))

    四、读出文本文件,随机输出其中的10个 单词

    import random
    file = open('hamlet.txt', 'r')
    txt = file.read().lower()
    
    for i in "!@#$%^&*()~:,.';{}[]|/?-<>":
    txt = txt.replace(i, ' ')
    
    newtxt = txt.split()
    print(random.sample(newtxt,10))    # random.choice也可以,但可能会取到重复的单词
    40、简单的图形界面模块

    easygui模块
    可以显示各种对话框、文本框、选择框
    功能演示:easygui.egdemo()

    easygui.msgbox(msg=’’,title=’’, ok_button=’ ok’,image=None,root=None): 跳出消息框
    easygui.choicebox(msg=’’,titel=’’,choices=[‘choice_1’,‘choice_2’,‘choice_3’,’…’]):按钮选项,提供一个可选择的列表,使用序列(元祖或列表)作为选项
    easygui.textbox(text=’’’…’’’):文本框
    easygui.passwordbox():类似于enterbox(),但输入的内容以“ * ”显示
    easygui.fileopenbox():打开文件

    41、海龟作图

    turtle模块,感兴趣的可以通过dir(turtle)查看他的方法,下面简单介绍几种
    turtle.setup(800,600,200,200):在屏幕坐标(200,200)处创建800x600大小的画布
    turtle.fd/bk(100):前进/后退100像素
    turtle.penup/pendown():提笔/下笔
    turtle.lt/rt(90):左转/右转90度
    turtle.seth(90):注意,括号里的绝对度数,无论你本来朝向哪里,输入90后,朝向正上方
    turtle.pencolor(‘purple’):画笔颜色
    turtle.pensize():画笔粗细
    turtle.circle():画圆

    42、上机练习:简单绘图

    一、利用turtle模块,进行图形绘制
    选择“正方形”,绘制一个边长100的绿色正方形

    import turtle as t
    t.pencolor('green')
    t.pensize(3)
    for i in range(4):
    t.fd(100)
    t.rt(90)
    t.done()

    选择“五角星”,绘制一个边长100的红色五角星

    import turtle as t
    t.pencolor('red')
    t.pensize(3)
    for i in range(5):
    t.fd(100)
    t.rt(144)
    t.done()

    二、调用turtle模块画一棵树,包括枝干和 树叶,并涂上颜色

    import turtle
    def tree(branchLen,t):
    if branchLen > 5:
    t.fd(branchLen)
    t.rt(20)
    tree(branchLen-15,t)
    t.left(40)
    tree(branchLen-15,t)
    t.right(20)
    t.backward(branchLen)
    
    def main():
    t = turtle.Turtle()
    myWin = turtle.Screen()
    t.left(90)
    t.up()
    t.backward(100)
    t.down()
    t.color('green')
    tree(75,t)
    myWin.exitonclick()
    
    main()
    测验题

    1、Python可以使用()函数打开文件,这个函数默认的打开模式为()。

    A. openfile ‘r’

    B. open ‘w’

    C. open ‘r’

    D. openfile ‘w’

    2、下列关于文件相关模块说法错误的是(____)。

    A. 打开二进制文件应该采用模式’rt’。

    B. 文件操作可以使用close方法关闭流。

    C. 通常采用with语句以保证系统自动关闭打开的流。

    D. 可以使用shelve模块进行对象持久化。

    3、下列关于时间相关模块说法错误的是()。

    A. datetime模块中strptime方法将struct_time对象格式化成字符串。

    B. datetime模块中timedelta模块用来表示日期或时间之间的差值。

    C. time.sleep()方法可以让程序在某处暂停几秒。

    D. calendar.isleap(2000)
    上述Python代码的结果是True。

    4、
    from datetime import *
    td1=timedelta(minutes=10)
    td2=timedelta(minutes=15)
    以下关于这段代码说法错误的是

    A. print(td1*10)的结果是100。

    B. print(td1<td2)的结果是True。

    C. print(td1+td2)的结果是0:25:00。

    D. print((td2-td1).seconds)的结果是300。

    5
    以下选项不是Python文件读操作的是(____)。

    A. open()

    B. read()

    C. readlines()

    D. readline()

    6、Python文件相关模块中的readline(size)函数,其中参数size用于指明读取的()。

    A.行数

    B.二进制数

    C.字符串数

    D.字节数或字符数

    7、下列关于Python中数学相关模块说法正确的是(___)。

    A.

    t=Fraction(7,4)
    m=1.75
    print(t==m)

    这段代码的输出结果是False。

    B.math.log(a,x)可以用来求以a为底的x的对数。

    C.cmath模块可以实现对复数进行极坐标表示和笛卡尔表示方法的转换。

    D.random.random()方法可以生成范围在[0,1]之间的随机数。

    8、下列关于shelve模块说法错误的是(___)。

    A.shelve中保存的列表对象可以直接进行添加数据元素的操作。

    B.shelve模块打开文件后,文件的键必须是字符串且唯一。

    C.操作开始必须打开shelve,并且在修改后需要关闭它。

    D.shelve模块通过构造一个简单的数据库,像操作字典一样按照键存储和获取本地的Python对象。

    9、

    import easygui
    easygui.textbox(msg='1',title='2',text='3',codebox=0)

    上述代码执行后,点击‘OK’,返回值是(____)。

    A.3
    B.1
    C.2
    D.0

    10、
    补充代码实现绘制上图,横线上应该填写(_____)(可行的最小正整数)。

    import turtle
    t=turtle.Turtle()
    for i in range(9):
    t.forward(200)
    t.right(______)
    turtle.done()

    答案
    1、C
    2、A
    3、A
    4、A
    5、A
    6、D
    7、C
    8、A
    9、A
    10、160

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐