正则表达式这一块主要还是利用re模块和正则表达式结合去进行一个指定字符串的提取,我们首先需要了解到的就是元字符:
我们并不只有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)
这里包含到了转义字符, ’\(‘就可以进行括号的识别,否则会被认为是子组
在Qt这里小题主要会考你某一个控件的作用,比如问你QMessage是干什么的等等,还有很多控件需要了解和去用,
比如:
大题还是主考代码:
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的大题应该就是这个模板,根据题干去加相应的功能即可
数据库编程主要还是将数据库与python(pycharm)连接起来使用,基本的sql语句
比如:
创建数据库: CREATE DATABASE database_name;
切换到数据库: USE database_name;
创建表: CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype );
插入数据: INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
查询数据: SELECT column1, column2, column3 FROM table_name WHERE condition;
更新数据: UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
删除数据: DELETE FROM table_name WHERE condition;
删除表: DROP TABLE table_name;
删除数据库: 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使用的更广泛些,返回的为元组嵌套
网络编程主要就是依靠套接字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的流程要更少一些
TCP和UDP客户端流程对比:左TCP右UDP,可以看出二者客户端大差不差但还是UDP简洁一步
通过对比我们还可以发现,TCP中发送使用的是send,接收为recv,而在UDP中发送为sendto,接收为recvfrom,这也是二者之间较大的区别
TCP:安全,但复杂,发送为send,接收为recv
UDP:不安全,但简便,发送为sendto,接受为recvfrom,服务器端:不用listen和accept,客户端不用connect
文件也是很有可能考大题的,但是不会单独出一个大题去考文件,而是可能会和网络编程和Qt结合起来去考一个或两个大题
Python 中的文件操作主要涉及打开文件、读写文件内容以及关闭文件。以下是这些操作的详细介绍和常用函数。
首先,使用 open()
函数来打开一个文件
file = open('example.txt', 'r') # 打开文件以读取
open()
函数的常用模式:
'r'
: 读模式(默认)'w'
: 写模式(会先截断文件)'x'
: 独占创建模式,如果文件已存在会抛出异常'a'
: 追加模式,写入到文件的末尾'b'
: 二进制模式't'
: 文本模式(默认)'+'
: 更新(读写)模式读取整个文件:read()
读取行:readline()或者readlines()
content = file.read() # 读取整个文件
print(content)
line = file.readline() # 读取一行
print(line)
all_lines = file.readlines() # 读取所有行到一个列表中
print(all_lines)
在写入模式下('w'
, 'a'
等),可以使用以下方法:
写入:write()
写入字符串序列:writelines()
file = open('example.txt', 'w') # 以写入模式打开
file.write("Hello, World!") # 写入内容
lines = ["First line", "Second line"]
file.writelines(lines) # 写入多行
file.close()
with
语句操作文件为了更好的管理文件的打开和关闭,通常使用 with
语句,它可以在代码块执行完毕后自动关闭文件。
with open('example.txt', 'r') as file:
for line in file:
print(line, end='')
到这里基本上就够用了,主要还是记住open函数中的常用模式就可以,别的直接操作就行,没有什么难的,其次注意与Qt或网络编程的链接考题,努努力总能会的。