python基础(五)

news2025/3/20 9:33:16

正则表达式

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

符号解释示例说明
.匹配任意字符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 flag
        flag = not flag
        color, 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=1
    panel = 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 = url

    def run(self):
        imgUrl = self.url.attrs["src"]
        imgAlt = self.url.attrs["alt"]
        res = requests.get(imgUrl) # 将链接添加进requests.get()中,赋值给res
 
        # 使用.content属性将响应消息转换成图片数据,赋值给img
        imgPic = res.content
        with 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,赋值给soup
    soup = BeautifulSoup(html, "lxml")
    # 使用find_all()查询soup中所有的class="pic"的节点,赋值给content_all
    content_all = soup.find_all(class_="pic")
 
    # for循环遍历content_all列表
    for content in content_all:
        # 使用find()查询content中的name="img"的节点,赋值给img
        img = 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 socket

socket_client = socket.socket() # 创建socket对象
socket_client.connect(('192.168.56.1', 6789)) # 连接到服务器
while True:
    send_msg = input("请输入要发送给服务端的消息:")
    if send_msg == 'exit':
        break
    socket_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 socket
 
socket_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':
        break
    conn.send(msg.encode("UTF-8"))  # encode将字符串编码为字节数组对象
conn.close()   # 关闭连接
socket_server.close() 
UDP套接字

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

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

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

相关文章

【连接池】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

《业务流程--穿越从概念到实践的丛林》读后感一:什么是业务流程

1.4 流程建模 画流程图常见的方法派别如下: 1)流图。美国国家标准协会(ANSI)制定的规范,利用VISIO中的流程符号进行画图。 2)事件驱动流程链(EPC)。ARIS(集成信息系统架构)。认为流程是由一系列事件触发,并且 针对事件的行为又将引发新的事件,流程的表现为“事件--功…

Sybase数据恢复—Sybase数据库无法启动,Sybase Central连接报错的处理案例

Sybase数据库数据恢复环境: Sybase数据库版本:SQL Anywhere 8.0。 Sybase数据库故障&分析: Sybase数据库无法启动。 错误提示: 使用Sybase Central连接报错。 数据库数据恢复工程师经过检测,发现Sybase数据库出现…

redis基础spark操作redis

Redis内存淘汰策略 将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。 为什么要使用内存淘汰策略呢? 当海量数据涌入redis,导致redis装不下了咋办,我们需要根据redis的内存淘汰策略,淘汰一些不那…

C++学习日记---第14天(蓝桥杯备赛)

笔记复习 1.对象的初始化和清理 对象的初始化和清理是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用后果是未知,同样的使用完一个对象或者变量,没有及时清理,也会造成一定的安全问题 构造函数&…

Unity ShaderLab 实现3D物体描边

实现思路: 给物体添加第二个材质球,在shader的顶点着色器中使顶点的位置变大,然后在片元着色器中输出描边颜色。 shader Graph实现如下: ShaderLab实现如下: Shader "Custom/Outline" {Properties{[HDR]_…

【HarmonyOS NEXT】ACL 受限权限申请

关键词:受限开放权限、ACL、鸿蒙 在鸿蒙应用开发过程中,部分权限被受到限制(如悬浮窗开发、读取联系人数据、读取公共目录音频文件等权限),但是在我们的应用开发过程中又不得不使用该权限时可向华为申请受限权限&#…

南京仁品耳鼻喉专科医院:12月启动公益义诊月

专业医疗资源送至“家门口”!南京仁品耳鼻喉专科医院启动公益义诊月 随着2024年即将步入尾声,南京仁品耳鼻喉医院为回馈社会,提升公众健康福祉,将于12月隆重推出“三甲专家公益义诊月”活动。此次活动旨在通过汇聚众多耳鼻喉领域…

【UE5 C++课程系列笔记】06——定时器的基本使用

目标 使用定时器每秒调用函数打印一句日志信息,并在调用一定次数后停止定时器。 步骤 1. 新建一个Actor类,这里命名为 2. 先在“TimerActor.cpp”中获取定时器管理器 使用定时器管理器来设置定时器,该定时器在2s后启动,然后每…

数据分析的尽头是web APP?

数据分析的尽头是web APP? 在做了一些数据分析的项目,也制作了一些数据分析相关的web APP之后,总结自己的一些想法和大家分享。 1.web APP是呈现数据分析结果的另外一种形式。 数据分析常见的结果是数据分析报告,可以是PPT或者…

看不见的彼方:交换空间——小菜一碟

有个蓝色的链接,先去看看两年前的题目的write up (https://github.com/USTC-Hackergame/hackergame2022-writeups/blob/master/official/%E7%9C%8B%E4%B8%8D%E8%A7%81%E7%9A%84%E5%BD%BC%E6%96%B9/README.md) 从别人的write up中了解到&…

以达梦为数据库底座时部署的微服务页面报乱码,调整兼容模式

1.问题描述 部署微服务,文件、代码是延用的mysql类型的,部署前做了部分适配,但是在使用dm数据库进行安装的服务在页面上查询出的数据却都是乱码 2.查询官网,注意到一个参数COMPATIBLE_MODE兼容模式的配置 考虑是延用mysql&…

K2升班卷(C++ 3道题)

目录 1.匹配 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例 1 解释 数据规模与约定 提示 2.乘方 题目描述 输入格式 输出格式 输入输出样例 数据规模与约定 3.缺水的王国 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例解…

Redis(4):主从复制

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

Educator头歌:离散数学 - 图论

第1关&#xff1a;图的概念 任务描述 本关任务&#xff1a;学习图的基本概念&#xff0c;完成相关练习。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;图的概念。 图的概念 1.一个图G是一个有序三元组G<V,R,ϕ>&#xff0c;其中V是非空顶点集合&am…

linux模拟HID USB设备及wireshark USB抓包配置

文章目录 1. 内核配置2. 设备配置附 wireshark USB抓包配置 linux下模拟USB HID设备的简单记录&#xff0c;其他USB设备类似。 1. 内核配置 内核启用USB Gadget&#xff0c;使用fs配置usb device信息。 Device Drivers ---> [*] USB support ---><*> USB …

Trimble X12助力电力管廊数据采集,为机器人巡视系统提供精准导航支持

地下电缆是一个城市重要的基础设施&#xff0c;它不仅具有规模大、范围广、空间分布复杂等特点&#xff0c;更重要的是它还承担着信息传输、能源输送等与人们生活息息相关的重要功能&#xff0c;也是一个城市赖以生存和发展的物质基础。 01、项目概述 本次项目是对某区域2公里左…

Mybatis:CRUD数据操作之多条件查询及动态SQL

Mybatis基础环境准备请看&#xff1a;Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之多条件查询 1&#xff0c;编写接口方法 在 com.itheima.mapper 包写创建名为 BrandMapper 的接口。在 BrandMapper 接口中定义多条件查询的方法。 而该功能有三个参数&#xff0c;…

嵌入式硬件实战基础篇(四)多路直流稳压电源

设计一个多路直流稳压电源 要求设计制作一个多路输出直流稳压电源,可将220 V / 5 0HZ交流电转换为5路直流稳压输出。具体要求&#xff1a; 输出直流电压 12V&#xff0c; 5V;和一路输出3- 15V连续可调直流稳压电源: 输出电流Iom500mA; 稳压系数 Sr≤0.05;

# MySql字符集报错

MySql报 java.sql.SQLException: Incorrect string value 乱码解决方法 文章目录 MySql报 java.sql.SQLException: Incorrect string value 乱码解决方法修改数据库字符集和排序规则检查数据库字符集和排序规则修改数据库字符集和排序规则&#xff08;谨慎操作&#xff09;修改…