Python快速入门:类、文件操作、正则表达式
类、文件操作、正则表达式
- 1. 类
- 2. 文件操作
- 3. 正则表达式
1. 类
类是用来描述具有相同的属性和方法的集合,定义了该集合中每个对象共有的属性和方法,对象是类的实例,可以调用类的方法。
定义类时,如有父类,则写在类名后面的括号里。如果没有继承任何其他父类,默认父类为object。靠继承进行子类化是创建和定制新类类型的一种方式,子类继承基类的属性,如果子类重写基类构造器,基类构造器就不会被调用(否则被调用),基类构造器必须显式写出才会被执行。
类里定义函数,第一个参数必须是self
,代表实例对象本身;__init__
函数,在新对象实例化时会自动运行,用于给新对象赋初值,不应当返回任何对象;类内定义函数时,如调用自身或父类的函数与变量,应使用self.函数名
或self.变量名
。
混合记法(mixedCase) 或 骆驼记法(camelCase) :
- 类名通常由大写字母打头(如"AddrBookEntry",“RepairShop”)
- 数据属性使用名词作为名字(如"name", “phone”,“email”)
- 方法使用谓词(动词加对象, 如"updateEmail"),Python规范推荐使用骆驼记法的下划线方式,如"update_email" 。
Python使用以下编码方式进行访问控制:
- 单下划线(
_foo
):表示protected变量,只允许其本身与子类访问,不能用于from module import * - 双下划线(
__foo
):表示private变量,只允许这个类本身访问。 - 头尾双下划线(
__foo__
):定义的是特列方法,类似__init__()
。
issubclass()
判断一个类是否另一个类的子类或子孙类
isinstance()
判断一个对象否另一个给定类的实例
特殊类属性:
name 类的名字(字符串)
doc 类的文档字符串
bases 类的所有父类构成的元组
dict 类的属性(返回一个字典,keys是属性名,values是相应属性对象的数据值)
module 类定义所在的模块
class 实例对于的类
e.g.
定义类AddrBookEntry
class AddrBookEntry(object):def __init__(self,id,nm,ph):self.empid = idself.name = nmself.phone = phprint('Create instance for:', self.name)def updatePhone(self,newph):self.phone = newphprint('Update phone for:',self.name)
john = AddrBookEntry(1,'John Doe','408-555-1212')
print(john.name)
print(john.phone)
输出
Create instance for: John Doe
John Doe
408-555-1212
john.updatePhone('415-555-1212')
print(john.phone)
输出
Update phone for: John Doe
415-555-1212
定义类EmplAddrBookEntry
class EmplAddrBookEntry(AddrBookEntry):def __init__(self,id,nm,ph,em):AddrBookEntry.__init__(self,id,nm,ph)self.email = emdef updateEmail(self,newem):self.email = newemprint('Update email address for:', self.name)
john = EmplAddrBookEntry(1,'John Doe','408-555-1212','john@python.org')
print(john.email)
输出
Create instance for: John Doe
john@python.org
john.updateEmail('john@java.org')
print(john.email)
输出
Update email address for: John Doe
john@java.org
2. 文件操作
使用BIF opne()
/file()
,打开文件(默认以读方式,若文件含有汉字可使用encoding=‘utf-8’),返回一个文件对象。文件对象访问模式,默认值为’r’
(1)文件对象的访问模式
文件模式 | 操作 |
---|---|
r | 只读模式 |
w | 只写模式,创建新文件 |
a | 追加模式(若文件不存在,则创建一个) |
r+ | 读写模式 |
w+ | 读写模式 |
a+ | 读写模式 |
rb | 二进制读模式 |
wb | 二进制写模式 |
ab | 二进制追加模式 |
rb+ | 二进制读写模式 |
wb+ | 二进制读写模式 |
ab+ | 二进制读写模式 |
(2) 文件对象的方法
read()
读取文件到字符串,如果未给定size参数(默认-1)或size值为负数,将读取整个文件。
readlines()
读取文件的所有(剩余)行,返回一个字符串列表(行列表)。
readline()
从一个打开的文件每次读取一行数据,将整行(含行结束符)作为字符串返回。如果未给定size参数(默认-1)或size值为负数,读取至行结束符。当没有足够内存可以一次读取整个文件时,使用readline()。
write()
将字符串写入文件
seek()
方法可以将文件"退回"到起始位置
flush()
清除内部I/O缓存,并将数据强行写会磁盘
close()
方法关闭一个之前打开的文件
3. 正则表达式
(1) 常用特殊符号
.
任意单个字符
^
匹配字符串开头
$
匹配字符串结尾
*
前一个字符0次或无限次扩展 abc*
可以是ab/abc/abcc/abccc
+
前一个字符1次或无限次扩展 abc+
可以是abc/abcc/abccc
?
前一个字符0次或1次扩展 abc?
可以是ab/abc
|
左右表达式任意一个 abc|def
表示abc或def
{m}
扩展前一个字符m次 ab{2}c
表示 abbc
{m,n}
扩展前一个字符m至n次(含n)ab{1,2}c
表示 abc/abbc
[ ]
对单个字符给出取值范围
[abc]
表示a,b,c中的一个 [a-z]
表示a到z单个字符
[^]
对单个字符给出排除范围 [^abc ]
非a或b或c的单个字符
()
分组标记,内部只能用|
\d
数字,等价于[0-9]
\w
单词字符,等价于[A-Za-z0-9_]
e.g.
^[A-Za-z]+$
26个字母组成的字符串
[A-Za-z0-9]+$
26个字母和数字组成的字符串
[\u4e00-\u9fa5]
中文字符
^[\u4E00-\u9FA5]{2,4}
2-4个汉字
(2) re模块
match()
:从字符串开始位置对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
search()
:从字符串任意位置的地方,对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
findall()
:返回全部匹配对象的列表
split()
:根据正则表达式的分隔符吧字符串分割为一个列表,并返回
匹配对象主要有以下两个方法:
group()
:返回全部匹配对象,或特定subgroup,如group(0)
groups()
:返回一个包含全部匹配的subgroup的元组(如果没有成功匹配,返回一个空元组)
函数式用法:一次性操作
import re
rst = re.search(r'[1-9]\d{5}','TEST 1000191')
面向对象用法:编译多次操作
pat = re.compile(r'[1-9]\d{5}')rst = pat.search('TEST 1000191')
相关文章:
Python快速入门:类、文件操作、正则表达式
类、文件操作、正则表达式1. 类2. 文件操作3. 正则表达式1. 类 类是用来描述具有相同的属性和方法的集合,定义了该集合中每个对象共有的属性和方法,对象是类的实例,可以调用类的方法。 定义类时,如有父类,则写在类名…...
java-day01
程序就是有序指令的集合 cmd执行java程序,javac Test.java,java Test java技术平台: javaSE标准版,javaEE企业版,javaME小型版 java语言面向对象的(oop),java跨平台性的(…...

玩转 Node.js 集群
一、介绍 Node 在 v0.8 时直接引入了 cluster 模块,用以解决多核 CPU 的利用率问题,同时也提供了较完善的 API,用以处理进程的健壮性问题。 cluster 模块调用 fork 方法来创建子进程,该方法与 child_process 中的 fork 是同一个…...

Day909.MySQL 不同的自增 id 达到上限以后的行为 -MySQL实战
MySQL 不同的自增 id 达到上限以后的行为 Hi,我是阿昌,今天学习记录的是关于MySQL 不同的自增 id 达到上限以后的行为的内容。 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。 虽然自然数是没有…...

JVM学习.01 内存模型
1、前言对于C、C程序员来说,在内存管理领域,他们拥有对象的“所有权”。从对象建立到内存分配,不仅需要照顾到对象的生,还得照顾到对象的消亡。背负着每个对象生命开始到结束的维护和管理责任。对于JAVA程序来说,因为J…...
R+VIC模型应用及未来气候变化模型预测
RVIC模型融合实践技术应用及未来气候变化模型预测在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用。目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然&…...
搞懂vue 的 render 函数, 并使用
render函数是什么 简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM 因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode(虚拟节点)的函数,而用render函数构建DOM,vu…...

【Linux】GDB的安装与使用
安装安装gdb的具体步骤如下:1、查看当前gdb安装情况rpm -qa | grep gdb如果有,则可以先删除:rpm -e --nodeps 文件名如果没有,则进行下一步。2、下载gdb源码包或者直接apt安装。apt命令安装:sudo apt install gdb源码包…...

MySQL索引特性
文章目录为什么要有索引?认识磁盘磁盘的结构磁盘的盘片结构定位扇区磁盘随机访问 (Random Access)与连续访问 (Sequential Access)MySQL与磁盘交互索引的理解测试主键索引索引的原理索引结构是否可以使用其他数据结构B树 vs B树聚簇索引 vs 非聚簇索引为什么要有索引…...
Python 面向对象编程——类定义与对象
<类定义与对象声明> 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥…...

基于 Apache Flink 的实时计算数据流业务引擎在京东零售的实践和落地
摘要:本文整理自京东零售-技术研发与数据中心张颖&闫莉刚在 ApacheCon Asia 2022 的分享。内容主要包括五个方面: 京东零售实时计算的现状实时计算框架场景优化:TopN场景优化:动线分析场景优化:FLINK 一站式机器学…...

【JavaEE】如何将JavaWeb项目部署到Linux云服务器?
写在前面 大家好,我是黄小黄。不久前,我们基于 servlet 和 jdbc 完善了博客系统。本文将以该系统为例,演示如何将博客系统部署到 Linux 云服务器。 博客系统传送门: 【JavaEE】前后端分离实现博客系统(页面构建&#…...

Mysql常用命令
mysql连接: [roothost]# mysql -u root -p Enter password:******创建数据库: CREATE DATABASE 数据库名; 删除数据库: drop database 数据库名; 使用mysqladmin删除数据库: [roothost]# mysqladmin -u root -p dr…...

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(4)
目录 写在前面: 题目:P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 解题思路: …...

在Win10以及SDK为33的环境下——小米便签项目的搭建
文章目录0. 我的操作系统和开发环境1. 相关文件下载:2. import project:2.1 用import project导入项目3. make project:3.1 AS中的命令行乱码问题:3.2 依赖库缺失问题:3.3 关于targetSdkVersion3.4 关于Missing URL3.5 关于Manifest merger f…...

FPGA纯verilog实现RIFFA的PCIE通信,提供工程源码和软件驱动
目录1、前言2、RIFFA简介RIFFA概述RIFFA架构RIFFA驱动3、vivado工程详解4、上板调试验证并演示5、福利:工程代码的获取1、前言 PCIE是目前速率很高的外部板卡与CPU通信的方案之一,广泛应用于电脑主板与外部板卡的通讯,PCIE协议极其复杂&…...

Linux网络配置
文章目录一、Linux网络配置原理图二、查看网络IP和网关ping测试主机之间网络连通性三、linux网络环境配置第一种方法(自动获取)第二种方法(指定ip)四、设置主机名和hosts映射设置主机名设置hosts映射五、主机名解析过程分析(Hosts、DNS)Hosts是什么DNS一、Linux网络配置原理图 …...

【Java学习笔记】多线程与线程池
多线程与线程池一、多线程安全与应用1、程序、进程与线程的关系2、创建多线程的三种方式(1)继承Thread类创建线程【不推荐】(2)实现Runnable接口创建线程(3)Callable接口创建线程3、线程的生命周期4、初识线…...
尺取法
尺取法是一种线性的高效率算法。记 (L, R ) 为一个序列内以L为起点的最短合法区间, 如果R随L的增大而增大的,就可以使用尺取法。具体的做法是不断的枚举 L,同时求出R。 因为 R 随 L增大而增大,所以总时间复杂度为 O(n) 指针i、j的两种方向: 反向扫描:i、j方向相反,i从头…...
20.有效的括号
给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...