1. 正则表达式

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。

re.match与re.search

re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配。

re.match函数

re.match(pattern, string, flags=0)

flags 是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等, 如下:

可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num=0): 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups(): 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

re.search 函数

re.search(pattern, string, flags=0)

re.search 扫描整个字符串并返回第一个成功的匹配。

(其用法同re.match)

re.sub函数

re.sub(pattern, repl, string, count=0, flags=0)
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • flags : 编译时用的匹配模式,数字形式。

这两个参数可选。

repl 参数可以是一个函数 :

compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

re.compile(pattern[, flags])

flags 可选,表示匹配模式,比如忽略大小写,多行模式等(同上)

当匹配成功时返回一个 Match 对象,其中:

  • group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0)
  • start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
  • end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
  • span([group]) 方法返回 (start(group), end(group))

findall函数

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

re.findall(pattern, string, flags=0)
或
pattern.findall(string[, pos[, endpos]])
  • pos 可选参数,指定字符串的起始位置,默认为 0。
  • endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。

re.finditer函数

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern, string, flags=0)

re.split函数

split 方法按照能够匹配的子串将字符串分割后返回列表。

re.split(pattern, string[, maxsplit=0, flags=0])

maxsplit : 分割次数,maxsplit=1 分割一次,默认为 0,不限制次数。

正则表达式模式

2. 网络编程

socket()函数

用 socket() 函数来创建套接字,语法格式如下:

socket.socket([family[, type[, proto]]])
  • family: 套接字家族可以是 AF_UNIX 或者 AF_INET
  • type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAMSOCK_DGRAM
  • protocol: 一般不填默认为0.

Socket 对象(内建)方法

下面是实例:

第一步,编写服务器端代码并运行如下:

运行服务器端代码后,看到服务器端处于运行状态,持续监听来自客户端的链接和访问。

第二步, 编写客户端代码并运行如下:

运行客户端代码后,接收到了来自服务器端的信息,同时发现客户端程序运行随后结束,关闭链接。

第三步, 回头查看服务器端。

发现服务器端识别了与客户端的链接地址和端口,同时服务器仍然处于运行状态,持续监听。

例子成功完成。

Python 网络编程的一些重要模块:

3. SMTP发送邮件

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

创建 SMTP 对象语法如下:

import smtplibsmtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

参数说明:

  • host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如:python.com,这个是可选参数。
  • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。
  • local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可。

SMTP对象使用sendmail方法发送邮件,语法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

参数说明:

  • from_addr: 邮件发送者地址。
  • to_addrs: 字符串列表,邮件发送地址。
  • msg: 发送消息

这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

 发送邮件实例:

发现抛出异常,异常信息显示目标机器拒绝链接。

待处理 。。。

4. 多线程

Python3 线程中常用的两个模块为:

  • _thread
  • threading(推荐使用)

thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 "_thread"。

_thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。

threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法。

Python中使用线程有两种方式:函数或者用类来包装线程对象。

函数式:

_thread.start_new_thread ( function, args[, kwargs] )

执行以上程后可以按下 ctrl-c 退出。

使用 threading 模块创建线程

可以通过直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程,即它调用了线程的 run() 方法。

例子:

运行结果:

线程同步 

使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有 acquire 方法和 release 方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire 和 release 方法之间。如下:

运行结果:

线程优先级队列( Queue)

Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。

这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。

Queue 模块中的常用方法:

  • Queue.qsize() 返回队列的大小
  • Queue.empty() 如果队列为空,返回True,反之False
  • Queue.full() 如果队列满了,返回True,反之False
  • Queue.full 与 maxsize 大小对应
  • Queue.get([block[, timeout]])获取队列,timeout等待时间
  • Queue.get_nowait() 相当Queue.get(False)
  • Queue.put(item) 写入队列,timeout等待时间
  • Queue.put_nowait(item) 相当Queue.put(item, False)
  • Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
  • Queue.join() 实际上意味着等到队列为空,再执行别的操作

运行结果:

5. Python3 解析 XML 文件

Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree:

XML例子文件如下:

使用 SAX 解析 xml 

#!/usr/bin/python3import xml.saxclass MovieHandler( xml.sax.ContentHandler ):def __init__(self):self.CurrentData = ""self.type = ""self.format = ""self.year = ""self.rating = ""self.stars = ""self.description = ""# 元素开始调用def startElement(self, tag, attributes):self.CurrentData = tagif tag == "movie":print ("*****Movie*****")title = attributes["title"]print ("Title:", title)# 元素结束调用def endElement(self, tag):if self.CurrentData == "type":print ("Type:", self.type)elif self.CurrentData == "format":print ("Format:", self.format)elif self.CurrentData == "year":print ("Year:", self.year)elif self.CurrentData == "rating":print ("Rating:", self.rating)elif self.CurrentData == "stars":print ("Stars:", self.stars)elif self.CurrentData == "description":print ("Description:", self.description)self.CurrentData = ""# 读取字符时调用def characters(self, content):if self.CurrentData == "type":self.type = contentelif self.CurrentData == "format":self.format = contentelif self.CurrentData == "year":self.year = contentelif self.CurrentData == "rating":self.rating = contentelif self.CurrentData == "stars":self.stars = contentelif self.CurrentData == "description":self.description = contentif ( __name__ == "__main__"):# 创建一个 XMLReaderparser = xml.sax.make_parser()# 关闭命名空间parser.setFeature(xml.sax.handler.feature_namespaces, 0)# 重写 ContextHandlerHandler = MovieHandler()parser.setContentHandler( Handler )parser.parse("C:\\Dragon\Python\movies.xml")

运行结果:

使用xml.dom解析xml

运行结果:

6. Python3 解析 JSON

使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

  • json.dumps(): 对数据进行编码。
  • json.loads(): 对数据进行解码。

例子:

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据, 如下例子:

在对应文件夹下生成了data.json 文件,查看内容:

Python 编码为 JSON 类型转换对应表:

JSON 解码为 Python 类型转换对应表:

Python 日期和时间

Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。时间间隔是以秒为单位的浮点小数。每个时间戳都以自从 1970 年 1 月 1 日午夜(历元)经过了多长时间来表示。从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。

time 模块

calendar 模块

Python3 pip

pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功能。

软件包也可在 https://pypi.org/ 中找到。

目前最新的 Python 版本已经预装了 pip。Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。因为本人例子中安装的是3.10.2 版本,所以应该是自带了,cmd检查如下:

显示版本21.2.4,证明自带了pip。

访问一下pip软件包管理网站如下:

 pip下载安装软件命令如下:

下载安装包命令:

pip install some-package-name

移除软件包命令:

pip uninstall some-package-name

查看已经安装的软件包:

pip list

参考:Python3 教程 | 菜鸟教程

Python 高级编程相关推荐

  1. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)

    今天为大家带来的内容是:python高级编程之消息队列(Queue)与进程池(Pool),结合了实例的形式详细分析了Python消息队列与进程池的相关原理.使用技巧与操作注意事项!!! Queue消息 ...

  2. python高级编程装饰器_Python装饰器

    def my_decorator(function): def _my_decorator(*args, **kw): #在调用实际函数之前做些填充工作 res = function(*args, * ...

  3. python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象

    第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...

  4. 【Python高级编程】

    Python高级编程:技巧代码的玄学与艺术 一.编程语言介绍 Python 作为一门优秀的编程语言,有着很多优势: 简单易学 Python有简单的语法,易于阅读和学习,很适合初学者.它的设计哲学是&q ...

  5. python高级编程-网络编程、多任务

    python高级编程 1 IP地址 用来在网络中标记一台电脑:在本地局域网上是唯一的. 2 端口 一个程序需要收发网络数据,就需要端口号. 3 socket 创建socket # 创建tcp sock ...

  6. Python 高级编程笔记之类别

    目录: 子类化内建类型 访问超类中的方法-super 描述符 & 属性 元编程 主要内容: 1.子类化内建类型 # -*- coding:utf-8 -*-class Folder(list) ...

  7. python高级编程(3) - 深入类和多态

    深入类和多态 一,鸭子类型和多态 鸭子类型 当你看到一只鸟走起来想鸭子,游泳起来像鸭子,叫起来像鸭子,那么这只鸟就叫做鸭子类型 我们并不关心对象是什么类型,到底是不是鸭子,只关心行为. 我们只关心一个 ...

  8. 4万字【Python高级编程】保姆式教学,进阶感觉到吃力?学完这些就轻松了

    前几天和一个小伙子聊天时,发现了一个问题,他从零开始学Python,学完列表.字典和函数等基础之后,就开始往爬虫方向进阶学习,结果又花了一个多月的时间,啥也没学成,反而寸步难行. 其实这个问题的主要原 ...

  9. python高级编程函数_Python高级编程之十大装B语法

    for - else 什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的.十大装B语法,for-else 绝对 ...

  10. python高级编程之网络编程

    Python高级之网络编程 端口 端口分类 知名端口 动态端口 查看端口 socket简介 电脑上进程之间的通信 什么是socket 创建socket 使用UDP套接字发送数据 使用UDP套接字接受数 ...

最新文章

  1. 如何在一个背景图像上,做半透明的图。
  2. mysql解压版怎么退出_mysql-8.0.15-winx64 解压版安装教程及退出的三种方式
  3. android:persistent (非系统app失效)
  4. ENode 2.8 最新架构图简介
  5. Node.js中事件的循环
  6. Android JNI学习(五)——Java与Native之间如何实现相互调用
  7. php是一种,php是一种什么类型的语言
  8. 房友系统服务器地址,房友系统的那些功能,你都知道吗?
  9. 基于matlab的瑞利衰落信道建模和仿真
  10. html表头和左侧固定js,固定表头jquery datatable的使用与定制
  11. 这才是在线Word转PDF的正确姿势
  12. Windows Cmd控制台程序会被鼠标单击暂停的解决方法
  13. 用Javascript实现回到顶部效果
  14. word样式管理:如何对样式进行修改删除
  15. VB中的ByVal和ByRef的区别
  16. 未能加载文件或程序集“office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。拒绝访问
  17. linux待机唤醒_Linux睡眠唤醒机制--Kernel态
  18. 事故频发,特斯拉还要“补课”
  19. 数据结构学习笔记(第六章:图)
  20. fcntl(nListenId, F_SETFD, FD_CLOEXEC) 的作用

热门文章

  1. Problem B: 英雄无敌3(2)【模拟,日期转换】
  2. nginx 301和302的区别与设置
  3. CSS的元素的隐藏与显示
  4. ccf 智能运维 裴丹_裴丹:智能运维算法需要工业界
  5. 程序员永远都不会出轨? 和程序员谈恋爱的真实感受
  6. 图解MESI(缓存一致性协议)
  7. 关于js控制元素的隐藏和显示
  8. android js隐藏元素,js如何控制span显示隐藏?
  9. libnuma详解(A NUMA API for LINUX)
  10. B2B(B to B) B2C(B to C) C2C(C to C) 的讲解及区别