Python 文件介绍和正则表达式
文章目录
- Python 文件和正则表达式
- 文件
- 打开文件
- 读取文件
- 直接读取 read():
- 逐行读取
- 采用 **for** 循环:
- 采用 readlines():
- 正则表达式
- 匹配规则
- re 模块
- match 方法:
- search 方法
- group 方法
- split 方法
- 编译:compile 方法
Python 文件和正则表达式
文件
打开文件
open 函数用来打开文件,常用模式有:
-
“r”:以只读方式打开文件。文件指针将会放在文件的开头。如果文件不存在,则报错。此种为打开文件的默认模式
-
“w”:以写入方式打开文件,清空文件内容并从头编辑;同时该文件不存在还会自动创建文件
-
“a”:以写入方式打开文件,文件指针放在文件末尾;同时该文件不存在还会自动创建文件
-
“r+”:以读写方式打开文件。文件指针将会放在文件的开头。如果文件不存在,则报错。
-
“w+”:以读写方式打开文件,清空文件内容并从头编辑;同时该文件不存在还会自动创建文件
-
“a”:以读写方式打开文件,文件指针放在文件末尾;同时该文件不存在还会自动创建文件
读取文件
直接读取 read():
fileName=r"./abc/test.txt"
with open(fileName,"r") as fileTxt:contents=fileTxt.read()print(contents)# print(contents.rstrp()) 删除尾部空行
文件路径:在 linux 中采用 / 来分隔, 在 windows 中采用 \ 来分隔,但是 \ 是一个转移字符,需要再采用一个 \ 来进行转义(“C:\\abc\\test.txt”),但在 python 中采用 r 标识一个字符串为一个原生字符串,不会对其中的转义字符进行转义(r"C:\abc\test.txt“)。稳妥起见,在 linux 的路径前也添加上 r。
其中 with 关键字能够在不需要访问文件时,将文件自动关闭,既不需要调用 close() 方法了。当程序出现 bug 无法执行 close() 时,未能妥善地关闭文件可能会导致数据丢失或受损,而这是采用 with 关键字的一个重要原因。
read() 用来读取文件,它将文件的全部内容当作一个长字符串保存在变量中。但是由于 read() 在 print 的时候会在末尾多打印一个空行,这是因为 read() 到达文件尾时返回一个空字符串,而这个空字符串显示出来就是一个空行,此时可以通过 rstrip() 来删除。
逐行读取
采用 for 循环:
fileName=r"./abc/test.txt"
with open(fileName,"r") as fileTxt:for line in fileTxt:print(line)# print(line.rstrip()) 删除多余空行
上面示例打印的时候也会多出一个空白行,这是因为在每行末尾都有一个换行符存在,而 print 本身也会加上一个换行符,所以就有了两个换行符啦,此时也需要通过 rstrip() 来消除这些多余的换行符。
采用 readlines():
在采用 with 关键字时,open 打开的文件对象只能在 with 代码块中可用。这有时候就不太方便了。而通过 readlines(),它从文件中读取每一行内容,并将它们存储在一个列表中,这个列表变量在之后的程序中可以被随时使用。
fileName=r"./abc/test.txt"
with open(fileName,"r") as fileTxt:lines=fileTxt.readlines()for line in lines:print(line.rstrip())
正则表达式
匹配规则
单个字符:
-
\d:匹配数字,即 0-9 如:'00\d'可以匹配'007',但无法匹配'00A' -
\D:匹配非数字,即不是数字 -
\w:匹配非特殊字符,即a-z、A-Z、0-9、汉字,常用的用来匹配字母和数字 -
\W:匹配特殊字符,即非字母、非数字、非汉字 -
.:匹配任意一个任意字符(除了\n) -
\s:匹配一个空白字符,即空格,tab键 -
\S:匹配非空白字符
变长字符:
-
*:表示任意个字符(包括0个)\d*表示任意个数字 -
+:表示至少一个字符\s+表示至少一个空白字符 \d+ … -
?:表示0个或1个字符 -
{n}:表示n个字符\d{3}表示匹配3个数字,例如'010' -
{n,m}:表示 n-m 个字符\d{3,8}表示3-8个数字,例如'1234567' -
[]:匹配 [ ] 中列举的字符,常用来精确匹配,举例如下:
-
如
[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线(_是特殊字符,需要转义) -
[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等 -
[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是 Python 合法的变量 -
[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}匹配的变量长度是1-20个字符(前面1个,后面[0,19])
其他字符:
-
^表示行的开头,^\d表示必须以数字开头。 -
$表示行的结束,\d$表示必须以数字结束。 -
A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'。
py也可以匹配'python',但是加上^py$就变成了整行匹配,就只能匹配'py'了。
re 模块
match 方法:
从字符串的起始位置开始匹配,如果匹配成功,就返回第一个对象。:
import re
m=re.match(r"^\d{3}[a-zA-Z]$","897y")
if(m):print("ok")
else:print("failed")
上例匹配一个三个数字开头一个字母结尾的字符串,采用了 match 方法,如果匹配成功,返回第一个 Match 对象,否则返回 None。
search 方法
工作方式与 match 类似,只是 search 从字符串的任意位置开始匹配,并返回第一个匹配的 Match 对象。区别在于:
n = re.search(r"bat|bae","eabat") # 能找到 bat
n = re.match(r"bat|bae","eabat") # 不能找到
group 方法
通过在正则表达式中使用小括号(),来对匹配到的数据进行分组,然后通过group([n]) 和 groups()获取对应的分组数据。值得一提的是,group() 是 Match 类中的方法,其他的方法还包括 groups(),start(),end(),span() ,这些方法都是用于从匹配的字符串中(或者说是从 Match对象中)获取相关信息。
import rem = re.match(r"([0-9]*)([a-z]*)([0-9]*)","123abc456")
print(m.group()) # 输出匹配的完整字符串:123abc456
print(m.group(0)) # 输出匹配的完整字符串:123abc456
print(m.group(1)) # 从匹配的字符串中获取第一个分组:123
print(m.group(2)) # 从匹配的字符串中获取第二个分组:abc
print(m.group(3)) # 从匹配的字符串中获取第三个分组:456
split 方法
使用分隔符将字符串进行切割,将被切割后的子串以列表的形式返回。
正常的采用空格分隔字符串的 split() 示例如下:
str="a b c"
s=str.split(" ") # 返回 [”a”, ”b”, ”c”]
采用正则表达式的 split 方法如下:它的功能更加强大
import res=re.split(r"\s+", "a b c") # 返回 [”a”, ”b”, ”c”]
s=re.split(r"[\s\,]+", "a,b, c d") # 返回 [”a”, ”b”, ”c”, ”d”]
s=re.split(r"[\s\,\;]+", "a,b;; c d") # 返回 [”a”, ”b”, ”c”, ”d”]
s = pattern.split(r"\d+", "abc23de3fgh") # 返回 [”abc”, ”de”, ”fgh”]#分隔符加上小括号之后,返回的字符串列表会保留分隔符
s = pattern.split(r"(\d+)", "abc23de3fgh")
# 返回 [“abc“, “23“, “de“, “3“, “fgh“]
编译:compile 方法
在 Python 中使用正则表达式时,re 模块内部会干两件事情:
-
编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
-
用编译后的正则表达式去匹配字符串。
如果一个正则表达式需要使用多次,出于效率的考虑,我们可以先预编译该正则表达式,这样后面直接使用就好啦。示例如下:
import re
reObj = re.compile(r"^(\d{3})-(\d{3,8})$")
s=reObj.match("010-45263")
print(s.group()) # 010-45263
编译后生成 Regular Expression 对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。
其他方法的使用可参考:python字符串_Python字符串匹配6种方法的使用
相关文章:
Python 文件介绍和正则表达式
文章目录 Python 文件和正则表达式文件打开文件读取文件直接读取 read():逐行读取采用 **for** 循环:采用 readlines(): 正则表达式匹配规则re 模块match 方法:search 方法group 方法split 方法编译:compile 方法 Pyth…...
ueditor百度富文本编辑器粘贴后html丢失class和style样式
问题 项目经理从123在线编辑上排版好的文章,粘贴到项目的编辑器上,样式完全乱了, 排版是这样的: 复制到ueditor后的格式: 这天差地别呀,于是打开代码模式,发现section的属性全没了 但是,sp…...
人脸自动贴国旗
(一)简介 国庆快到了,每年这个时候,大家的头像都会贴上国旗水印,然后我就像这刚好可以用opencv dilb实现一个简单的自动将国旗贴在人脸上,刚好配合gradio写一个简单的demo gradio官方文档 (…...
异步FIFO设计
1 FIFO简介 FIFO的本质是RAM,具有先进先出的特性。 FIFO的基本使用原则:空时不能读,满时不能写 FIFO的两个重要参数:宽度和深度 FIFO的两种类型: 同步FIFO:读写时钟相同,通常用来做数据缓存…...
学习python和anaconda的经验
PYTHON 1 常用命令 1.1 1.1 注释 Python注释多行的方法有以下三种:使用ctrl+/实现多行注释、在每一行的开头使用shift+#键、输入’‘’ ‘’或者"“” “”",将要注释的代码插在中间 1.2 def init( ):函数 区分两个函数: 1.def init(self): 这种形式在__init_…...
【Linux】多线程【上】
文章目录 前言1、Linux线程概念1-1、什么是线程?1-1-1、如何看待页表1-1-2、回顾进程地址空间1-1-3、页表怎么进行虚拟地址到物理地址的映射的?1-1-4、Linux中线程的概念(重点)1-1-5、原生线程库1-1-6、代码测试1-1-7、知识点&…...
生成式人工智能在高等教育 IT 中的作用
作者:Jared Pane 通过将你大学的数据与公共 LLMs 和 Elasticsearch 安全集成来找到你需要的答案。 根据 2023 年 4 月 EDUCAUSE 的一项调查,83% 的受访者表示,生成式人工智能将在未来三到五年内深刻改变高等教育。 学术界很快就询问和想象生…...
黑龙江省DCMM认证、CSMM认证、CMMM认证、知识产权等政策奖励
2023年8月28日 为深入落实党的二十大精神,认真落实省第十三次党代会关于创新龙江建设的部署要求,全面贯彻新发展理念,融入和服务构建新发展格局,实施创新驱动发展战略,着力建设创新龙江,不断塑造振兴发展新…...
腾讯云2023年云服务器优惠活动价格表
腾讯云经常推出各种云产品优惠活动,为了帮助大家更好地了解腾讯云服务器的价格和优惠政策,下面给大家分享腾讯云最新云服务器优惠活动价格表,助力大家轻松上云! 一、轻量应用服务器优惠活动价格表 1、轻量应用服务器:…...
Sleuth--链路追踪
1 链路追踪介绍 在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上&…...
MyBatis初级
文章目录 一、mybatis1、概念2、JDBC缺点2.1、之前jdbc操作2.2 、原始jdbc操作的分析 3、mybatis的使用3.1、导入maven依赖3.2、新建表3.3、实体类3.4、编写mybatis的配置文件3.5、编写接口 和 映射文件3.6、编写测试类3.7、注意事项 4、代理方式开发5、mybatis和spring整合5.1…...
Spring 学习(二)AOP
一、什么是AOP Aspect Oriented Programming,即面向切面编程。对一个大型项目的代码而言,整个系统要求关注安全检查、日志、事务等功能,这些功能实际上“横跨”多个业务方法。在一般的OOP编程里,需要在每一个业务方法内添加相关非…...
笔记1.1 计算机网络基本概念
计算机网络是通信技术与计算机技术紧密结合的产物 通信系统模型: 计算机网络是一种通信网络 计算机网络是互连的、自洽的计算机集合。 互连:互联互通 自洽:无主从关系 通过交换网络互连主机 Internet:数以百万计的互连的计算设…...
液压切管机配套用液压泵站比例阀放大器
液压切管机配套用液压泵站是液压系统的动力源,可按机械设备工况需要提供一定压力、流量和清洁度的工作介质。它由泵组、油箱组件、控温组件、滤油器组件及蓄能器组件等组合而成,液压泵站主要服务于大型管道工程。...
C++ Primer Plus 第七章笔记
目录 函数基本知识 没有返回值的函数:void函数 有返回值的函数: 函数原型 1.为什么需要函数原型? 2.函数原型的语法 3.函数原型的功能 按值传递函数参数 形参和实参 局部变量 参数问题 使用const指针参数 调用自身的函数…...
常用数据库的 API - 开篇
API API 这个词在大多数人看来可能和 CNS 差不多,前者天天听说就是用不上,后者天天读就是发不了。 不过,通过今天的一个简短介绍,今后 API 这个东西你就用上了,因为在文章最后我将会展示一个最最基础且高频的 API 使…...
C++之生成详细汇编代码(二百一十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
AIGC|当一个程序员学会用AI来辅助编程实践
一、辅助编程 作为主要以 JAVA 语言为核心的后端开发者,其实,早些时间我也用过比如 Codota、Tabnine、Github 的 Copilot、阿里的 AI Coding Assistant 等 IDEA 插件,但是我并没有觉得很惊奇,感觉就是生成一些代码片段罢了&#x…...
9.14号作业
仿照vector手动实现自己的myVector,最主要实现二倍扩容功能 有些功能,不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…...
【面试题】C/C++ 中指针和引用的区别
指针是一个独立的对象,它可以指向不同的变量或对象,可以重新赋值给其他变量。而引用是已存在的变量的别名,它必须在定义时初始化,并且不能重新绑定到另一个变量。指针可以是空指针(nullptr),它不…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
华为OD机考- 简单的自动曝光/平均像素
import java.util.Arrays; import java.util.Scanner;public class DemoTest4 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint[] arr Array…...
Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。 Unity官方下有源码,我们下载源码后来学习。 ECS 与OOP(Object-Oriented Programming)对应,ECS是一种完全不同的编程范式与数据架构…...
EC2安装WebRTC sdk-c环境、构建、编译
1、登录新的ec2实例,证书可以跟之前的实例用一个: ssh -v -i ~/Documents/cert/qa.pem ec2-user70.xxx.165.xxx 2、按照sdk-c demo中readme的描述开始安装环境: https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c 2…...
