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 ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
