python基础(五)

正则表达式

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

符号解释示例说明
.匹配任意字符b.t可以匹配bat / but / b#t / b1t等
\w匹配字母/数字/下划线b\wt可以匹配bat / b1t / b_t等
但不能匹配b#t
\s匹配空白字符(包括\r、\n、\t等)love\syou可以匹配love you
\d匹配数字\d\d可以匹配01 / 23 / 99等
\b匹配单词的边界\bThe\b
^匹配字符串的开始^The可以匹配The开头的字符串
$匹配字符串的结束.exe$可以匹配.exe结尾的字符串
\W匹配非字母/数字/下划线b\Wt可以匹配b#t / b@t等
但不能匹配but / b1t / b_t等
\S匹配非空白字符love\Syou可以匹配love#you等
但不能匹配love you
\D匹配非数字\d\D可以匹配9a / 3# / 0F等
\B匹配非单词边界\Bio\B
[]匹配来自字符集的任意单一字符[aeiou]可以匹配任一元音字母字符
[^]匹配不在字符集中的任意单一字符[^aeiou]可以匹配任一非元音字母字符
*匹配0次或多次\w*
+匹配1次或多次\w+
?匹配0次或1次\w?
{N}匹配N次\w{3}
{M,}匹配至少M次\w{3,}
{M,N}匹配至少M次至多N次\w{3,6}

 Python提供了re模块来支持正则表达式相关操作,下面是re模块中的核心函数。

函数说明
compile(pattern, flags=0)编译正则表达式返回正则表达式对象
match(pattern, string, flags=0)用正则表达式匹配字符串 成功返回匹配对象 否则返回None
search(pattern, string, flags=0)搜索字符串中第一次出现正则表达式的模式 成功返回匹配对象 否则返回None
split(pattern, string, maxsplit=0, flags=0)用正则表达式指定的模式分隔符拆分字符串 返回列表
sub(pattern, repl, string, count=0, flags=0)用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数
fullmatch(pattern, string, flags=0)match函数的完全匹配(从字符串开头到结尾)版本
findall(pattern, string, flags=0)查找字符串所有与正则表达式匹配的模式 返回字符串的列表
finditer(pattern, string, flags=0)查找字符串所有与正则表达式匹配的模式 返回一个迭代器
purge()清除隐式编译的正则表达式的缓存
re.I / re.IGNORECASE忽略大小写匹配标记
re.M / re.MULTILINE多行匹配标记

import re
# 使用 findall 找到所有匹配的子串
pattern = re.compile('foo')  #编译正则表达式返回正则表达式对象
matches = re.findall(pattern, 'foobar foo baz')
print(matches)  # 输出: ['foo', 'foo']pattern = re.compile('foo')
match = re.search(pattern, 'foobar foo baz') # 使用 search 查找第一个匹配
if match:print(match.group())  # 输出: foo# 使用 match 检查字符串是否以模式开始
pattern = re.compile('foo')
match = re.match(pattern, 'foobar')
if match:print(match.group())  # 输出: foo# 使用 sub 替换所有匹配的子串
pattern = re.compile('foo')
new_string = re.sub(pattern, 'bar', 'foobar foo baz')
print(new_string)  # 输出: barbar bar baz
def valid():qq = input('请输入QQ号: ')res = re.match(r'^[1-9]\d{4,11}$', qq)if res:print('合规号')else:print('输入qq无效')
valid()

图形界面

GUI是图形用户界面的缩写,Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的,Tk是一个工具包,最初是为Tcl设计的,后来被移植到很多其他的脚本语言中,它提供了跨平台的GUI控件。

Tkinter

import tkinter
import tkinter.messagebox
def Tkinter_test():flag = True# 修改标签上的文字def change_label_text():nonlocal flagflag = not flagcolor, msg = ('black', 'Hello, world!')\if flag else ('green', 'Goodbye, world!')label.config(text=msg, fg=color)def confirm_to_quit():        # 确认退出if tkinter.messagebox.askokcancel('温馨提示', '确定要退出吗?'):top.quit()top = tkinter.Tk()     # 创建顶层窗口top.geometry('300x200')     # 设置窗口大小top.title('小游戏')     # 设置窗口标题# 创建标签对象label = tkinter.Label(top, text='Hello, world!', font='Arial -30', fg='red')label.pack(expand=1) #你想让这个Label占据更多的空间,你可以设置expand=True或者expand=1panel = tkinter.Frame(top)     # 创建一个装按钮的容器# 创建按钮对象button1 = tkinter.Button(panel, text='修改', command=change_label_text)button1.pack(side='left')button2 = tkinter.Button(panel, text='退出', command=confirm_to_quit)button2.pack(side='right')panel.pack(side='bottom')tkinter.mainloop()     # 开启主事件循环
if __name__ == '__main__':Tkinter_test()

turtle绘图

import turtle# 设置屏幕
screen = turtle.Screen()
screen.bgcolor("white")
screen.title('turtle_text')
screen.setup(600,600)# 创建画笔
pen = turtle.Turtle()
pen.pencolor('red') #画笔颜色
pen.fillcolor('yellow')
pen.width(5)   #设置线宽
pen.speed(5)   #设置笔移动的速度(速度值是1-10逐渐变快;0 对应的速度最
pen.back(100) #控制笔后退指定距离,坐标原点在画布的中心
# 绘制五角星
for i in range(5): pen.forward(250)   #控制笔前进指定距离pen.right(144)     #向右旋转指定角度
turtle.done() # 等待用户关闭窗口

网络编程

网络编程是指利用计算机网络进行信息交流的编程。它涉及到多个计算机之间的通讯和数据传输,包括通过网络连接进行数据交换、远程服务器访问、网络协议实现等内容‌。计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享。

TCP/IP

实现网络通信的基础是网络通信协议,这些协议通常是由(IETF)制定的。所谓“协议”就是通信计算机双方必须共同遵从的一组约定,例如怎样建立连接、怎样互相识别等,网络协议的三要素是:语法、语义和时序。构成今天使用的Internet的基础的是TCP/IP协议族,所谓协议族就是一系列的协议及其构成的通信模型,通常也把这套东西称为TCP/IP模型。与国际标准化组织发布的OSI/RM这个七层模型不同,TCP/IP是一个四层模型,自底向上依次是:网络接口层、网络层、传输层和应用层。

TCP全称传输控制协议,它是基于IP提供的寻址和路由服务而建立起来的负责实现端到端可靠传输的协议,之所以将TCP称为可靠的传输协议是因为TCP向调用者承诺了三件事情:1)数据不传丢不传错(利用握手、校验和重传机制可以实现)。2)流量控制(通过滑动窗口匹配数据发送者和接收者之间的传输速度)3)拥塞控制(通过RTT时间以及对滑动窗口的控制缓解网络拥堵)。

IP通常被翻译为网际协议,它服务于网络层,主要实现了寻址和路由的功能。接入网络的每一台主机都需要有自己的IP地址,IP地址就是主机在计算机网络上的身份标识。计算机网络上有大量的被我们称为' 路由器 '的网络中继设备,它们会存储转发发送到网络上的数据分组,让从源头发出的数据最终能够找到传送到目的地通路,这项功能就是所谓的路由。

基于HTTP访问

HTTP是超文本传输协议,requests是一个基于HTTP协议来使用网络的第三库,pip install requests

检索下载豆瓣top前25的电影jpg图片

from threading import Thread
import requests                # 导入requests模块,用于向网页发送请求
from bs4 import BeautifulSoup  # 导入BeautifulSoup,用于解析网页内容# 继承Thread类创建自定义的线程类
class DownloadHanlder(Thread):def __init__(self, url):super().__init__()self.url = urldef run(self):imgUrl = self.url.attrs["src"]imgAlt = self.url.attrs["alt"]res = requests.get(imgUrl) # 将链接添加进requests.get()中,赋值给res# 使用.content属性将响应消息转换成图片数据,赋值给imgimgPic = res.contentwith open(f"./{imgAlt}.jpg", "wb") as fp:fp.write(imgPic)def load():# 定义网页地址url = f"https://movie.douban.com/top250?start=25&filter="# 定义headers,用于存储请求头中的参数,这里只需要设置User-Agent参数,将自己伪装成浏览器headers = {"User-Agent": "Mozilla/5.0"}response = requests.get(url, headers=headers)  # 向网页发起请求html = response.text # 使用.text属性获取网页的内容,并赋值给html# 使用BeautifulSoup()传入变量html和解析器lxml,赋值给soupsoup = BeautifulSoup(html, "lxml")# 使用find_all()查询soup中所有的class="pic"的节点,赋值给content_allcontent_all = soup.find_all(class_="pic")# for循环遍历content_all列表for content in content_all:# 使用find()查询content中的name="img"的节点,赋值给imgimg = content.find(name="img")DownloadHanlder(img).start()if __name__ == '__main__':load()

套接字编程

套接字就是一套用C写成的应用程序开发库,主要用于实现进程间通信和网络编程,在网络应用开发中被广泛使用。在Python中也可以基于套接字来使用传输层提供的传输服务,并基于此开发自己的网络应用。实际开发中使用的套接字可以分为三类:流套接字(TCP套接字)、数据报套接字和原始套接字。

TCP套接字

所谓TCP套接字就是使用TCP协议提供的传输服务来实现网络通信的编程接口。在Python中可以通过创建socket对象并指定type属性为SOCK_STREAM来使用TCP套接字。由于一台主机可能拥有多个IP地址,而且很有可能会配置多个不同的服务,所以作为服务器端的程序,需要在创建套接字对象后将其绑定到指定的IP地址和端口上。这里的端口并不是物理设备而是对IP地址的扩展,用于区分不同的服务。

msg->发送->server 接收,  回复

client.py
import socketsocket_client = socket.socket() # 创建socket对象
socket_client.connect(('192.168.56.1', 6789)) # 连接到服务器
while True:send_msg = input("请输入要发送给服务端的消息:")if send_msg == 'exit':breaksocket_client.send(send_msg.encode("UTF-8")) # 发送消息# 接收消息recv_data = socket_client.recv(1024).decode("UTF-8")    # 1024是缓冲区大小,一般1024,recv是阻塞式print(f"服务端回复的消息是:{recv_data}")
socket_client.close() # 关闭连接
server.py
import socketsocket_server = socket.socket()
socket_server.bind(('192.168.56.1', 6789))
# 监听端口
socket_server.listen(512)
# 等待客户端连接,accept方法返回二元元组(连接对象, 客户端地址信息)
print(f"服务端已开始监听,正在等待客户端连接...")
conn, address = socket_server.accept()
print(f"接收到了客户端的连接,客户端的信息:{address}")# 接受客户端信息,使用客户端和服务端的本次连接对象,而非socket_server
while True:data: str = conn.recv(1024).decode("UTF-8")     # 接收消息print(f"客户端发来的消息是:{data}")msg = input("请输入你要回复客户端的消息:")     # 回复消息if msg == 'exit':breakconn.send(msg.encode("UTF-8"))  # encode将字符串编码为字节数组对象
conn.close()   # 关闭连接
socket_server.close() 
UDP套接字

传输层除了有可靠的传输协议TCP之外,还有一种非常轻便的传输协议叫做用户数据报协议,简称UDP。TCP和UDP都是提供端到端传输服务的协议,二者的差别就如同打电话和发短信的区别,后者不对传输的可靠性和可达性做出任何承诺从而避免了TCP中握手和重传的开销,所以在强调性能和而不是数据完整性的场景中(例如传输网络音视频数据),UDP可能是更好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电机瞬态分析基础(7):坐标变换(3)αβ0变换,dq0变换

1. 三相静止坐标系与两相静止坐标系的坐标变换―αβ0坐标变换 若上述x、y坐标系在空间静止不动,且x轴与A轴重合,即,如图1所示,则为两相静止坐标系,常称为坐标系,考虑到零轴分量,也称为αβ0坐标…

Mac 环境下类Xshell 的客户端介绍

在 Mac 环境下,类似于 Windows 环境中 Xshell 用于访问 Linux 服务器的工具主要有以下几种: SecureCRT: 官网地址:https://www.vandyke.com/products/securecrt/介绍:支持多种协议,如 SSH1、SSH2、Telnet 等…

Java 泛型详细解析

泛型的定义 泛型类的定义 下面定义了一个泛型类 Pair&#xff0c;它有一个泛型参数 T。 public class Pair<T> {private T start;private T end; }实际使用的时候就可以给这个 T 指定任何实际的类型&#xff0c;比如下面所示&#xff0c;就指定了实际类型为 LocalDate…

arkTS:持久化储存UI状态的基本用法(PersistentStorage)

arkUI&#xff1a;持久化储存UI状态的基本用法&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 持久化储存UI状态的基本用法&#xff08;PersistentStorage&#xff09;2.1.1 源码1的相关说明2.1.1.1 数据存储2.1.1.2 数据读取2.1.1.3 动态更新2.1.1.4 显示…

OSPTrack:一个包含多个生态系统中软件包执行时生成的静态和动态特征的标记数据集,用于识别开源软件中的恶意行为。

2024-11-22 &#xff0c;由格拉斯哥大学创建的OSPTrack数据集&#xff0c;目的是通过捕获在隔离环境中执行包和库时生成的特征&#xff0c;包括静态和动态特征&#xff0c;来识别开源软件&#xff08;OSS&#xff09;中的恶意指标&#xff0c;特别是在源代码访问受限时&#xf…

UDP客户端服务器通信

在这篇博客中&#xff0c;我们将探索 UDP&#xff08;用户数据报协议&#xff09; 通信&#xff0c;简要地说&#xff0c;UDP 是一种无连接、快速但不可靠的通信协议&#xff0c;适用于需要快速数据传输但对丢包容忍的场景&#xff0c;比如视频流和在线游戏。就像《我是如此相信…

Unreal Engine使用Groom 打包后报错

Unreal Engine使用Groom打包后报错 版本5.4.4 blender 4.2.1 项目头发用了groom&#xff0c;运行后报错 错误&#xff1a; Assertion failed: Offset BytesToRead < UncompressedFileSize && Offset > 0 [File:E:\UnrealEngine-5.4.4-release\Engine\Source\R…

deepin 安装 chrome 浏览器

deepin 安装 chrome 浏览器 最近好多小伙伴儿和我说 deepin 无法安装最新的谷歌浏览器 其实是因为最新的 谷歌浏览器 其中的一个依赖需要提前安装 提前安装依赖然后再安装谷歌浏览器就可以了 安装 fonts-liberationsudo apt -y install fonts-liberation安装 chrome 浏览器sudo…

ffmpeg 增亮 docker 使用

使用最新的 docker pull jrottenberg/ffmpeg docker run -it --rm -v /path/to/input:/input -v /path/to/output:/output jrottenberg/ffmpeg <ffmpeg command>比如我想增亮 在 /home 目录下 有一个 video.mp4 docker run --rm -v /home:/home jrottenberg/ffmpeg:7…

小白可以报名鸿蒙开发培训吗

随着科技的飞速发展&#xff0c;尤其是移动互联网和智能硬件的不断进步&#xff0c;各大科技公司纷纷推出了自家的操作系统&#xff0c;而华为的鸿蒙系统(HarmonyOS)无疑成为了其中的佼佼者。随着鸿蒙系统的逐步推广&#xff0c;越来越多的开发者开始关注这一新的开发平台。那么…

Figma入门-原型交互

Figma入门-原型交互 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的&#xff0c;对…

Linux内核机制自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;先搬移过来&#xff0c;也不知道到底是对是错了。 1、Linux内存管理 在计算机的世界&#xff0c;内存犹如一条长河&#xff0c;在这条长河中&#xff0c;cpu将这条长河划分成了段和页。cpu要将一…

ES----安装 elasticsearch入门,elasticsearch安装,centos安装es,centos安装elasticsearch

ES 如需要对应资源&#xff0c;请评论留言&#xff0c;或再最后视频中关注获取 1. 安装 1.1 安装es 创建网络&#xff08;centos系统&#xff0c;docker环境&#xff09; docker network create es-netdocker安装es —如果下载失败&#xff0c;请看我的docker配置镜像的文章…

Milvus×Florence:一文读懂如何构建多任务视觉模型

近两年来多任务学习&#xff08;Multi-task learning&#xff09;正取代传统的单任务学习&#xff08;single-task learning&#xff09;&#xff0c;逐渐成为人工智能领域的主流研究方向。其原因在于&#xff0c;多任务学习可以让我们以最少的人力投入&#xff0c;获得尽可能多…

172页PPT集团数字化转型采购供应链及财务管控业务流程指南

一、供应商管理与数字化转型 1.1供应商管理数字化的重要性与挑战 重要性&#xff1a; 效率提升&#xff1a; 数字化可以提高供应商管理的效率&#xff0c;通过自动化流程减少手动操作&#xff0c;加快决策速度。透明度增强&#xff1a; 数字化工具可以提供实时数据&#xff…

设计模式 外观模式 门面模式

结构性模式-外观模式 门面模式 适用场景&#xff1a;如果你需要一个指向复杂子系统的直接接口&#xff0c; 且该接口的功能有限&#xff0c; 则可以使用外观模式。 不用关心后面的查询具体操作 /*** 聚合查询接口*/ RestController RequestMapping("/search") Slf…

基于开源云原生数据仓库 ByConity 体验多种数据分析场景

基于开源云原生数据仓库 ByConity 体验多种数据分析场景 业务背景什么是 ByConity上手实测环境要求测试操作远程登录 ECS 服务器windows10 自带连接工具 执行查询 ByConity 相对于 ELT 能力的优化提升并行度任务级重试并行写入简化数据链路 业务背景 大家都知道&#xff0c;在…

HarmonyOS(61) 组件间状态共享的分类以及状态选择器的选取优先级

状态共享 状态共享的分类状态共享选择器State与prop\Link\ObservedObjectLink组合的区别合理选择装饰器的顺序参考资料 状态共享的分类 HarmonyOS的组件之间是可以共享状态数据了&#xff0c;不同的组件之间&#xff0c;状态共享的场景也不一样&#xff0c;根据共享范围从小到…

Redis(4):主从复制

一、主从复制概述 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(master)&#xff0c;后者称为从节点(slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。   默认情况下&#xff0c;每台Redis…

14 —— Webpack解析别名

import {checkPhone, checkCode} from ../src/utils/check.js 这么使用相对路径不安全 —— 在webpack.config.js中配置解析别名来代表src绝对路径