又到一年总结季,下周要考Python啦,整理一下老师给的ppt
Python Programing 03
代码块
- 分支语句的作用范围可以是有限的
- 使用代码块表示该作用范围
- 代码块由缩进定义
- 注意使用冒号
- 同一代码块的缩进空格数要一致
Python Programing 04 函数,模块,简单文件读写
函数
- 程序可能会很长很长
- 同样的功能可能会多次执行
- 把执行特定功能的模块封装起来就是函数
- 便于修改,逻辑更加清晰,代码可以重用
lambda函数
- lambda语句创建一个无名函数,并将该函数作为返回值
- 只能包含一个表达式,连
if
这样的结构都不支持 - def语句中的函数名是预先设定好的。lambda语句则可以把产生的函数赋给任意一个变量名
- lambda语句产生的函数也可以不占用变量名
模块
-
将一些函数或变量封装在
.py
文件中,以供调用 -
比函数更高层次的封装
-
.py
文件的名字就是模块的名字 -
通过这种封装,可以避免单个
.py
文件过长 -
自定义的模块应该放在主程序目录下
-
模块的调用
-
模块被载入后成为了一个对象
-
模块的意义:代码重用和管理(同函数);模块提供命名空间(作为对象来实现)
读取文本文件
#打开一个文件
input = open(‘file_name’, ‘r’)
#读取文件中的内容到一个字符串
content = input.read()
#关闭文件
input.close()
相对路径和绝对路径
- 相对路径:以程序文件所在的位置为根目录
- 绝对路径:从“C:\”写起
- 路径的书写经常使用raw字符串:
r‘xxx’
按行读取文件
line=input.readline()
- 文件结尾处返回空字符串
lines=input.readlines()
写入文件
#以写入方式打开一个文件
output = open(‘file_name’, ‘w’)
#写入一行
output.write(‘one apple a day’ + ‘\n’)
#关闭文件
output.close()
- 把数字转化成字符串写入
从文件中读取数字
Python Programing 05 类与对象,异常处理
定义一个类
class 你的类:
xxx
xxx
方法中的指代
self
——对象自己super
(类名称,self)——父类
产生对象
- -使用赋值语句创建对象:
o1=C1()
o2=C1()
类的方法和对象的属性
- 类中定义的函数称为方法
- 方法可以理解为类的行为
- 对象可以含有一些变量(可能是方法产生的),称为属性
- 属性是属于个体的
类的继承
class 类的名字(父类的名字):
xxx
xxx
- 父类中的方法将被子类继承
继承多个父类
class C1(C2,C3):......
- 当C2和C3中存在同名内容时,以C2为准
多态:同样的接口,不同的方法
- 水果.切
- 西瓜.切
- 橙子.切
- 榴莲.切
- 同名方法的搜索:自下而上
钩子
- 类中,以__XXX__为名的函数称为钩子
- 重载钩子函数可以实现特殊功能
构造函数
__init__()
- 对象产生时会自动运行这个函数
异常处理
- 异常:可以改变程序中控制流程的事件
- 异常是一种特殊分支
- 一般是某种错误或者失败发生
- Python可以自动处理异常,处理方法是立即终止程序,并且报告问题类型和位置
- 我们可以手动定义异常处理的方式
异常处理的基本语法
try
观察一段代码,尝试捕捉其中发生的异常except
相应某种异常,或者所有的异常finally
无论异常是否发生,总会运行这里的代码else
如果try内的语句未发生异常,则执行
异常捕获机制
- 按先后顺序尝试捕获异常
- 如果一条except不响应这个异常,则向后传递
- 如果没有语句响应这个异常,则Python系统处理
Python Programing 06 Ipython,Numpy,Scipy
Ipthon
- 安装:cmd下输入
pip install ipython
- 运行:cmd下输入
ipython
输入?
查看帮助文档
Tab键自动完成
- 键入一些内容之后,按Tab键,显示可能的变量或者函数名;
- 也可以用于显示模块中有哪些可调用的方法或常量:
import math
math.[Tab]
内省
中断执行的代码
- 当代码死循环时可以用
ctrl + C
退出运行
命令历史
-按↑可以调出上一条指令
找回忘记保存的变量
魔术命令
用Ipython运行文件
- %run+路径+文件名
%run D:/test.py
在交互模式下运行大段代码
- 默认情况下,交互模式只能一条一条执行代码,不能把一段代码复制粘贴到交互模式运行
- 使用
%cpaste
命令来执行多行代码 - 或者直接使用
%paste
命令来执行当前剪贴板中的内容
Numpy
- 在cmd下通过
pip install numpy
安装 - 用
import numpy as np
来载入
多维数组array
- NumPy的核心就是这个多维数组array
Python自带的数组是弱类型的,可以存放不同类型的内容,因此无法进行某些运算,如矩阵相乘
array是一个同结构数据的多维容器
每个array数组都有一个shape和一个dtype属性,分别记录其各维度大小以及数据类型 - 创建array序列
d=[1,2,3]
arr=np.array(d)
- 指定array的类型
arr1 = np.array([1,2,3], dtype = np.float64)
arr2 = np.array([1,2,3], dtype = np.int32)
索引和切片
- 二维数组可以索引两次
- np的索引和切片不复制内容
- 复制:
.copy()
Scipy
- 通过在cmd下输入
pip install scipy
安装
Python Programing 07 Pandas数据处理
Pandas
- 基于Numpy构建
- 包含
Series
和DataFrame
两种数据结构,以及相应的方法 - 调用方式
from pandas import Series,DataFrame
import pandas as pd
创建Series
- 常规创建
obj2 = Series([2,2,3,3], index = [‘a’, ‘b’, ‘c’, ‘d’])
- 以字典创建
d = {‘a’:123, ‘b’:456, ‘c’ :789}
obj3 = Series(d)
states = [‘a’, ‘c’, ‘d’]
DataFrame
- 很像一个Excel表格
- 含有一组有序的列
- 列内同构,列之间可以是不同的数据类型
- 既有列索引,也有行索引
- 以二维结果保存数据(高维数据视作二维表格的叠加)
- 创建DataFrame
d = {‘name’: [‘Bob’, ‘Jack’, ‘Lili’, ‘Dongwei’],
‘age’: [28, 33, 22, 88],
‘salary’:[3000, 2, 5000, 999999999]}
frame1 = DataFrame(d)
frame2 = DataFrame(d, columns = [‘age’, ‘name’, ‘salary’])
frame3 = DataFrame(d, index = [‘01’, ‘02’, ‘03’, ’04’])
- 给列赋值
frame3[‘IQ’] = [110, 70, 100, 999] #长度必须匹配
- 按行索引
somebody = frame3.ix[’02’]
- 丢弃指定行或列
frame4 = frame3.drop(‘IQ’, axis = 1) #丢弃列
frame5 = frame3.drop(’02’)
- 插入列
s = Series([1,2,3])
frame5.insert(1, ‘aaa’, s)
- 两个index的运算
append #连接
difference #差集
intersection #交集
union #并集
- 过滤
frame6 = frame3[frame3[‘age’] > 30]
- 按索引排序
obj6 = obj3.sort_index()
frame 10 = frame3. sort_index()
frame 11 = frame3. sort_index(axis = 1)
- 处理缺失数据
手工产生NaN值:np.nan
x2 = x.dropna() #剔除含NaN的行
x2 = x.fillna(0) #以0替换NaN
x2 = x.fillna({‘a’:-1, ‘c’:0}) #对于’a’列’c’列分别操作
x2 = x.fillna(method = ‘ffill’) # 以插值替换NaN
- 统计汇总
s1 = frame3.sum() #按列小计
s2 = frame3.sum(axis = 1) #按行
- 合并数据集
Python Programing 08 数据读写
Numpy读写矩阵
np.save(文件名,矩阵)
np.load(文件名)
- pandas读取csv表格
pd.read_csv(文件名)#读取csv表格,自动类型推断
- pandas写入csv表格
frame.to_csv(文件名)
处理畸形的csv文件
- 当csv文件结构有问题时,pd.read_csv函数无法读取
- 使用上述方法读入文件,然后进行整理,最后转化成DataFrame
pandas读取二进制文件
frame.save(文件名)
pd.load(文件名)
pandas读写Excel文件
xls_file = pd.ExcelFile(‘data.xls’)
table = xls_file.parse(‘Sheet1’)
读取JSON文件
读取xml
- 使用lxml库来解析xml
from lxml import objectify
parsed = objectify.parse(open('cd_catalog.xml'))
root=parsed.getroot()
- 可用函数:getchildren() x.tag
读取html
from lxml.html import parse
from urllib.request import urlopen
parsed = parse(urlopen('http://www.zufe.edu.cn/’))
doc = parsed.getroot()
links = doc.findall('.//a’)
links[0].get('href’)
links[0].text_content()
读取html中的table
parsed = parse(urlopen('http://info.zufe.edu.cn/xygk/szdw.htm’))
doc = parsed.getroot()
tables = doc.findall(‘.//table’)
‘.//tr’ ‘.//td’
Python Programing 09 数据绘图
matplotlib绘图
- 载入
import matplotlib.pyplot as plt
- 载入图片
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(np.arange(10))
fig.show()
- 管理subplot
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
#参数:行数,列数,第几个
- 调节subplot间距
fig.subplots_adjust(wspace = 0.5)
#可用参数:left right bottom top wspace hspace
- 绘制各种图像
from numpy.random import randn
ax1.plot(randn(50).cumsum())#折线图
ax2.hist(randn(100), bins = 20)#柱状图
ax3.scatter(randn(50), randn(50))#散点图
fig.show()
- 颜色标记线型
ax1.plot(randn(50).cumsum(), linestyle = ‘--’, color = ‘g’, marker = ‘o’ )
- 设置坐标轴范围
ax1.set_xlim([0,100])
ax1.set_ylim([-1,1])
- 设置刻度标签和具体刻度
ticks = ax1.set_xticks([0,20,40,60,80,100])
labels = ax1.set_xticklabels([‘zero’, ‘one’, ‘two’, ‘three’, ‘four’, ‘five’], rotation = 30)
- 设置标题和轴标签
ax1.set_title('fig 1’)
ax1.set_xlabel(‘Step’)
ax1.set_ylabel(‘Value’)
fig.show()
- 添加图例
ax4 = fig.add_subplot(2,2,4)
ax4.plot(randn(1000).cumsum(), ‘k’, label = ‘one’)
ax4.plot(randn(1000).cumsum(), ‘r.’, label = ‘two’)
ax4.legend(loc = ‘best’)
fig.show()
- 绘制形状
rect = plt.Rectangle((0.2,0.75), 0.4, 0.15, color = ‘g’, alpha = 0.2)
ax.add_patch(rect)
- 保存图片
fig.savefig(‘xxx.svg’, dpi = 400, bbox_inches = ‘tight’)
pandas绘图
from pandas import Series, DataFrame
import pandas as pd
df = DataFrame(randn(10,4).cumsum(0), columns = [‘A’, ‘B’, ‘C’, ‘D’], index = np.arrange(0,100,10))
df.plot()
读入Matlib图片
import scipy.io as sio
raw_K=sio.loadmat('Subject1K.mat')
raw_V=sio.loadmat('Subject1V.mat')
k = raw_K['Subject1K']
v = raw_V['Subject1V']
Python Programing 10 PyQt信号和槽
我们选择的GUI库:PyQt5
- PyQt安装:在cmd下输入
pip install pyqt5
- 第一个例子
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Form(QDialog):
def __init__(self,parent=None):
super().__init__(parent)
app=QApplication(sys.argv)
form=Form()
form.show()
app.exec_()
- 第二个例子:计算器
import sys
from math import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Form(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.text = QLabel('AAA')
self.browser = QTextBrowser()
self.lineedit = QLineEdit("Type an expression.")
self.lineedit.selectAll()
layout = QVBoxLayout()
layout.addWidget(self.text)
layout.addWidget(self.browser)
layout.addWidget(self.lineedit)
self.setLayout(layout)
self.lineedit.setFocus()
self.lineedit.returnPressed.connect(self.updateUi)
self.setWindowTitle("Calculate")
def updateUi(self):
try:
text = str(self.lineedit.text())
self.browser.append("%s = <b>%s</b>" % (text, eval(text)))
except:
self.browser.append("<font color=red>%s is invalid!</font>" % text)
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
Qt类
- Qt类的继承关系:各种控件类都继承自QWidget QWidget继承自QObject
常见的控件
- QPushButton:按钮
QLabel:文本标签(不能交互)
QLineEdit:单行文本框控件
QTextEdit:多行文本控件
QCheckBox:勾选框
QSlider:滑动条
信号
-信号就是信号类型的对象
信号和槽链接的方式
- 发出对象.信号名.connect(接收对象.槽名)
第三个例子:汇率
import sys
import urllib.request
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Form(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
date = self.getdata()
rates = sorted(self.rates.keys())
dateLabel = QLabel(date)
self.fromComboBox = QComboBox()
self.fromComboBox.addItems(rates)
self.fromSpinBox = QDoubleSpinBox()
self.fromSpinBox.setRange(0.01, 10000000.00)
self.fromSpinBox.setValue(1.00)
self.toComboBox = QComboBox()
self.toComboBox.addItems(rates)
self.toLabel = QLabel("1.00")
grid = QGridLayout()
grid.addWidget(dateLabel, 0, 0)
grid.addWidget(self.fromComboBox, 1, 0)
grid.addWidget(self.fromSpinBox, 1, 1)
grid.addWidget(self.toComboBox, 2, 0)
grid.addWidget(self.toLabel, 2, 1)
self.setLayout(grid)
self.fromComboBox.currentIndexChanged.connect(self.updateUi)
self.toComboBox.currentIndexChanged.connect(self.updateUi)
self.fromSpinBox.valueChanged.connect(self.updateUi)
self.setWindowTitle("Currency")
def updateUi(self):
to = self.toComboBox.currentText()
from_ = self.fromComboBox.currentText()
amount = ((self.rates[to]/self.rates[from_])*self.fromSpinBox.value())
self.toLabel.setText("{0:.2f}".format(amount))
def getdata(self):
self.rates = {}
try:
date = "Unknown"
data = urllib.request.urlopen("https://www.gov.uk"
"/government/uploads/system/uploads"
"/attachment_data/file/702273"
"/exrates-monthly-0518.csv").read()
for line in data.decode("utf-8", "replace").split("\n"):
line = line.rstrip()
if not line or line.startswith(("#", "Closing ", "Country")):
continue
fields = line.split(",")
if line.startswith("China"):
date = fields[-1]
else:
try:
value = float(fields[3])
self.rates[fields[0]] = value
except ValueError:
pass
return "Exchange Rates Date: " + date
except Exception as e:
return "Failed to download:\n{}".format(e)
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
Python Programing 11 PyQt5对话框,控件
QLabel
self. aLabel = QLabel(self)
self. aLabel. setText(“AAA”)
self. aLabel.setPixmap( QPixmap(“a.jpg"))
QSpinBox,QDoubleSpinBox 数字框
self.mySpinBox = QDoubleSpinBox(self)
self.mySpinBox. setRange(1, 1000000000)
self.mySpinBox.setValue(1000)
self.mySpinBox.valueChanged.connect(self.updateUi)
QSlider 滑动条
设置:setMinimum,setMaximum,setSingleStep,setValue
信号:valueChanged
读取:v = self.mySlider.value()
QLineEdit,QTextEdit 可编辑文本框
self.lineedit = QLineEdit("Type a string.")
self.lineedit.returnPressed.connect(self.updateUi)
s = self.lineedit.Text()
QTextBrowser 不可编辑文本框
self.browser = QTextBrowser()
self.browser.append(‘aaa’)
QListWidget 选单
self.listWidget = QListWidget(self)
self.listWidget.addItems(['item1', 'item2', 'item3'])
self.listWidget.itemClicked.connect(self.XXX)
QComboBox 下拉选单
self.comboBox = QComboBox(self)
itemdata = ['item0', 'item1', 'item2']
self.comboBox.addItems(itemdata)
self.comboBox.currentIndexChanged.connect(self.updateUi)
QPushButton 按钮
self.okButton = QPushButton(self)
self.okButton. setText(“OK")
self.okButton.clicked.connect(self.accept)
QHLayOut,QVLayOut 横,纵向布局
self.layout = QVBoxLayout(self)
self.layout.addWidget(xxx)
self.setLayout(layout)
QGridLayOut 矩阵式布局
self.layout = QGridLayout(self)
self.layout.addWidget(myLabel, 0, 0)
self.layout.addWidget(mySpinBox, 0, 0)
self.setLayout(layout)
QSpacerItem 弹簧
s = QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Expanding)
layout.addSpacerItem(s)
利用弹出式对话框获得信息
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class PenPropertiesDlg(QDialog):
def __init__(self, parent=None):
super(PenPropertiesDlg, self).__init__(parent)
widthLabel = QLabel("&Width:")
self.widthSpinBox = QSpinBox()
widthLabel.setBuddy(self.widthSpinBox)
self.widthSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
self.widthSpinBox.setRange(0, 24)
self.beveledCheckBox = QCheckBox("&Beveled edges")
styleLabel = QLabel("&Style:")
self.styleComboBox = QComboBox()
styleLabel.setBuddy(self.styleComboBox)
self.styleComboBox.addItems(["Solid", "Dashed", "Dotted", "DashDotted", "DashDotDotted"])
okButton = QPushButton("&OK")
cancelButton = QPushButton("Cancel")
buttonLayout = QHBoxLayout()
buttonLayout.addStretch()
buttonLayout.addWidget(okButton)
buttonLayout.addWidget(cancelButton)
layout = QGridLayout()
layout.addWidget(widthLabel, 0, 0)
layout.addWidget(self.widthSpinBox, 0, 1)
layout.addWidget(self.beveledCheckBox, 0, 2)
layout.addWidget(styleLabel, 1, 0)
layout.addWidget(self.styleComboBox, 1, 1, 1, 2)
layout.addLayout(buttonLayout, 2, 0, 1, 3)
self.setLayout(layout)
self.setWindowTitle("Pen Properties")
okButton.clicked.connect(self.accept)
cancelButton.clicked.connect(self.reject)
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.width = 1
self.beveled = False
self.style = "Solid"
penButton = QPushButton("Set Pen")
self.label = QLabel("The Pen has not been set")
self.label.setTextFormat(Qt.RichText)
layout = QVBoxLayout()
layout.addWidget(penButton)
layout.addWidget(self.label)
self.setLayout(layout)
self.setWindowTitle("Pen")
penButton.clicked.connect(self.setPenProperties)
self.updateData()
def updateData(self):
bevel = ""
if self.beveled:
bevel = "<br>Beveled"
self.label.setText("Width = {}<br>Style = {}{}".format(self.width, self.style, bevel))
def setPenProperties(self):
dialog = PenPropertiesDlg(self)
dialog.widthSpinBox.setValue(self.width)
dialog.beveledCheckBox.setChecked(self.beveled)
dialog.styleComboBox.setCurrentIndex(
dialog.styleComboBox.findText(self.style))
if dialog.exec_():
self.width = dialog.widthSpinBox.value()
self.beveled = dialog.beveledCheckBox.isChecked()
self.style = dialog.styleComboBox.currentText()
self.updateData()
app = QApplication(sys.argv)
form = Form()
form.resize(400, 200)
form.show()
app.exec_()
Python Programing 12 PyQt主窗口编程
- 具体代码指路:图像编辑代码
图像类
image = QImage(fname)
imageLabel = QLabel()
imageLabel.setPixmap(QPixmap.fromImage(image))
状态栏
菜单栏
工具栏
动作
动作组
Python Programing 13 Qt Designer
- 安装:
pip3 install PyQt5_tools
- 打开Qt Designer方式指路:打开QD
- 完成的设计保存为.ui文件,需要转化为.py文件才可以使用。命令:
pyuic5 -o 1.py 1.ui
- 不要修改转换得到的.py文件
设计步骤
对话框的实现
对话框的测试
大概就是这样了,下周上机考了1551
书于吃了玉米水饺就不会冻耳朵的冬至
来源:CSDN
作者:拔牙不打麻药
链接:https://blog.csdn.net/weixin_43820665/article/details/103576897