Python高级技术复习指南

 1.正则表达式

        正则表达式这一块主要还是利用re模块和正则表达式结合去进行一个指定字符串的提取,我们首先需要了解到的就是元字符

Python高级技术复习指南_第1张图片

我们并不只有re.findall这一个方法,还有一个match对象方法以及flag参数也要一并复习

因为是简单复习,所以我们来举几个例子:

eg1:

有一批网址:

http://www.interoem.com/messageinfo.asp?id=35

http://3995503.com/class/class09/news_show.asp?id=14

http://lib.wzmc.edu.cn/news/onews.asp?id=769

http://www.zy-ls.com/alfx.asp?newsid=377&id=6http://www.fincm.com/newslist.asp?id=415

需要正则后为:

http://www.interoem.com/ 
http://3995503.com/ 
http://lib.wzmc.edu.cn/ 
http://www.zy-ls.com/  

import re
strings = '''http://www.interoem.com/messageinfo.asp?id=35
http://3995503.com/class/class09/news_show.asp?id=14
http://lib.wzmc.edu.cn/news/onews.asp?id=769
http://www.zy-ls.com/alfx.asp?newsid=377&id=6http://www.fincm.com/newslist.asp?id=415'''
ex = "(http://.*?/).*?"#这里主要的难点就在于找出合适的正则表达式
for each in re.findall(ex,strings):
    print(each)

这里还有一个‘子组’的概念:如果在正则表达式中包含括号,则只会匹配出括号也就是子组中的内容,这个还是要简单记一下的

eg2:

利用正则表达式匹配出字符串中s=”(hello world), zha(Tom)” 括号中的内容

re.findall(r’\(.+?\)’,s)

这里包含到了转义字符, ’\(‘就可以进行括号的识别,否则会被认为是子组

2.PyQt-GUI编程

        在Qt这里小题主要会考你某一个控件的作用,比如问你QMessage是干什么的等等,还有很多控件需要了解和去用,

比如:

  1. QLabel:用于显示文本或图像的标签
  2. QPushButton:用于点击的按钮
  3. QCheckBox:复选框控件,可以选择和取消选择
  4. QRadioButton:单选按钮控件,只能选择一个选项
  5. QLineEdit:用于输入和编辑单行文本的文本框
  6. QTextEdit:用于编辑和显示多行文本的文本框
  7. QComboBox:下拉列表框,提供一个选择列表
  8. QSlider:滑动条控件,用于选择范围内的一个值
  9. QProgressBar:进度条控件,用于显示任务的完成进度
  10. QSpinBox:数字选择框,用于选择整数值
  11. QDateTimeEdit:日期和时间编辑框,用于选择日期和时间
  12. QTableView:表格视图控件,用于显示和编辑表格数据
  13. QTreeView:树状视图控件,用于显示树形结构的数据
  14. QListView:列表视图控件,用于显示项目列表
  15. QTabWidget:选项卡控件,用于创建多个页面
  16. QMenuBar和QMenu:菜单栏和菜单控件,用于创建菜单
  17. QGraphicsView:图形视图控件,用于显示和编辑图形元素
  18. QWebEngineView:Web浏览器控件,用于显示网页内容

大题还是主考代码:

eg1:假如你有一个已经pyuic的.py文件,想对其进行一系列操作我们通常就是采用下面这种方法:定义一个类去进行操作

这里简单说一下信号和槽的链接:

第一点:假如你设计的ui界面中有pushButton这个控件,想对他进行连接就直接self.pushButton......等等,如果是LineEdit(单行文本),就直接self.LineEdit......,当然注意顺序,可能是pushButton_2等等,名称写对就可以

第二点:槽函数是不需要写括号的,像下面展示的prn函数就不需要括号

from PyQt5 import QtWidgets
from signal_slot import Ui_Form
import sys
class My_signal_slot(QtWidgets.QWidget,Ui_Form):
    def __init__(self):
        super(My_signal_slot, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.prn)
    def prn(self):
        print("打印测试")
if __name__=="__main__":
    app=QtWidgets.QApplication(sys.argv)
    main=My_signal_slot()
    main.show() 
    sys.exit(app.exec_())

 Qt的大题应该就是这个模板,根据题干去加相应的功能即可

3.数据库编程

        数据库编程主要还是将数据库与python(pycharm)连接起来使用,基本的sql语句

比如:

  1. 创建数据库: CREATE DATABASE database_name;

  2. 切换到数据库: USE database_name;

  3. 创建表: CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype );

  4. 插入数据: INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);

  5. 查询数据: SELECT column1, column2, column3 FROM table_name WHERE condition;

  6. 更新数据: UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;

  7. 删除数据: DELETE FROM table_name WHERE condition;

  8. 删除表: DROP TABLE table_name;

  9. 删除数据库: DROP DATABASE database_name;

在SqlServer中应该也都滚瓜烂熟了,这里简单提一嘴不多赘述。

接下来就是数据库与python的连接代码,大题应该会考:

以下就是数据库与python连接的常用代码了,比较重要的语句是cur.execute语句,在对数据库的操作中将sql语句作为参数填充进去之后就可以执行相应的效能

import pymysql
db=pymysql.connect(host='localhost',port=3306,user='root',passwd='123456',database='stu',charset='utf8')
#获取游标,创建游标对象
cur=db.cursor()
#数据操作
cur.execute("insert into class_1 VALUES (4,'Emma',12,'m',86);")
#将修改内容提交到数据库
db.commit()
#关闭游标和数据库连接
cur.close()
db.close()

当然传参也可以传变量参数,

cur.execute("insert into class_1 values ('%s',%d,'%s',%f);"%(name,age,sex,score))
#或者
cur.execute("insert into class_1 values ('%s',%s,'%s',%s);",(name,age,sex,score))

这两种都可以,第一种是常见的python占位符传参,第二种是数据库独有的占位符传参,只需全部传入%s字符型的参数,语句会根据表中每个属性的类型进行自动类型转换,说简单就是,你只管传%s,他自己会变的。 

还有一点是关于查询出的数据的遍历,使用的是cur.fetchall(),cur.fetchone()等函数也需要复习到,fetchall使用的更广泛些,返回的为元组嵌套

4.网络编程

        网络编程主要就是依靠套接字Socket来实现的,基本就以下几步:

               (1) 创建服务器套接字;

               (2) 使用bind()方法绑定;

               (3)调用listen()方法去监听某个特定的地址

               (4) 使用accept()方法接受客户端的连接

               (5) 利用套接字的两个方法:send()用于发送数据recv()用于接收数据);

               (6) 关闭套接字。

        但是需要注意的是在网络编程中有两个协议:TCP和UDP,二者区别就在于:TCP更安全,UDP更方便

接下来我们针对TCP和tUDP的Server(服务器)和Client(客户端)进行代码演示:

TCP_Server:

import socket
sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#bind方法绑定
sockfd.bind(('0.0.0.0',8888))
#监听队列,这里代表可以同时连接5个客户端
sockfd.listen(5)
print('Waiting for connect....')
while True:
    print('Waiting for receive....')
    #接受客户端的连接
    connfd,addr = sockfd.accept()
    print('Connect from ',addr)
    while True:
        #recv接收数据,数字为接受的最大字节数
        data = connfd.recv(1024)
        if not data:
            break
        print('Receive data:'+data.decode())
        send_data = input('请输入你需要发送的内容:')
        #send发送数据
        connfd.send(send_data.encode())
    connfd.close()
sockfd.close()

TCP_Client:

from socket import *
sockfd = socket()
sercer_addr = ('127.0.0.1',8888)
#connect进行连接
sockfd.connect(sercer_addr)
while True:
    print('Waiting........')
    send_data = input('请输入需要发送的信息:')
    if not send_data:
        break
    #send发送信息
    sockfd.send(send_data.encode())
    data = sockfd.recv(1024)#recv接收信息,recv中的数字代表接受的最大字节数
    print('From server:',data.decode())
sockfd.close()

 UDP_Server:

from socket import *
sockfd = socket(AF_INET,SOCK_DGRAM)
server_addr = ('0.0.0.0',8888)
#bind绑定
sockfd.bind(server_addr)
print("Waiting for connect....")
while True:
    print('Waiting for receive....')
    #recvfrom接收
    data,addr = sockfd.recvfrom(1024)
    print('Receive data:'+ data.decode())
    str_data = input("请输入需要发送的信息:")
    #sendto发送
    sockfd.sendto(str_data.encode(),addr)
sockfd.close()

UDP_Client:

import socket
from socket import *
addr = ('127.0.0.1',8888)
sockfd = socket(AF_INET,SOCK_DGRAM)
while True:
    data = input("请输入需要发送的信息:")
    #sendto发送
    sockfd.sendto(data.encode(),addr)
    #recvfrom接收
    msg,addr = sockfd.recvfrom(1024)
    print('From Server : '+msg.decode())
sockfd.close()

 TCP和UDP的服务器流程对比:左为TCP,右为UDP,可以看出二者比较下来UDP的流程要更少一些

Python高级技术复习指南_第2张图片Python高级技术复习指南_第3张图片

 TCP和UDP客户端流程对比:左TCP右UDP,可以看出二者客户端大差不差但还是UDP简洁一步

Python高级技术复习指南_第4张图片Python高级技术复习指南_第5张图片

 通过对比我们还可以发现,TCP中发送使用的是send,接收为recv,而在UDP中发送为sendto,接收为recvfrom,这也是二者之间较大的区别

网络编程小结

TCP:安全,但复杂,发送为send,接收为recv

UDP:不安全,但简便,发送为sendto,接受为recvfrom,服务器端:不用listen和accept,客户端不用connect

5.文件操作

        文件也是很有可能考大题的,但是不会单独出一个大题去考文件,而是可能会和网络编程和Qt结合起来去考一个或两个大题

Python 中的文件操作主要涉及打开文件、读写文件内容以及关闭文件。以下是这些操作的详细介绍和常用函数。

1. 打开文件

首先,使用 open() 函数来打开一个文件

file = open('example.txt', 'r')  # 打开文件以读取

open() 函数的常用模式:

  • 'r': 读模式(默认)
  • 'w': 写模式(会先截断文件)
  • 'x': 独占创建模式,如果文件已存在会抛出异常
  • 'a': 追加模式,写入到文件的末尾
  • 'b': 二进制模式
  • 't': 文本模式(默认)
  • '+': 更新(读写)模式

2. 读取文件内容

读取整个文件:read()

读取行:readline()或者readlines()

content = file.read()  # 读取整个文件
print(content)

line = file.readline()  # 读取一行
print(line)

all_lines = file.readlines()  # 读取所有行到一个列表中
print(all_lines)

3. 写入文件

在写入模式下('w', 'a'等),可以使用以下方法:

写入:write()

写入字符串序列:writelines()

file = open('example.txt', 'w')  # 以写入模式打开
file.write("Hello, World!")  # 写入内容

lines = ["First line", "Second line"]
file.writelines(lines)  # 写入多行

4. 关闭文件

file.close()

5. 使用 with 语句操作文件

为了更好的管理文件的打开和关闭,通常使用 with 语句,它可以在代码块执行完毕后自动关闭文件。

with open('example.txt', 'r') as file:
    for line in file:
        print(line, end='')

到这里基本上就够用了,主要还是记住open函数中的常用模式就可以,别的直接操作就行,没有什么难的,其次注意与Qt或网络编程的链接考题,努努力总能会的。 

你可能感兴趣的:(python,pyqt)