Python 文件和正则表达式

文章目录

  • Python 文件和正则表达式
    • 文件
      • 打开文件
      • 读取文件
        • 直接读取 read():
        • 逐行读取
          • 采用 **for** 循环:
          • 采用 readlines():
    • 正则表达式
      • 匹配规则
      • re 模块
        • match 方法:
        • search 方法
        • group 方法
        • split 方法

Python 文件和正则表达式

文件

打开文件

      open 函数用来打开文件,常用模式有:

  1. “r”:以只读方式打开文件。文件指针将会放在文件的开头。如果文件不存在,则报错。此种为打开文件的默认模式

  2. “w”:以写入方式打开文件,清空文件内容并从头编辑;同时该文件不存在还会自动创建文件

  3. “a”:以写入方式打开文件,文件指针放在文件末尾;同时该文件不存在还会自动创建文件

  4. “r+”:以读写方式打开文件。文件指针将会放在文件的开头。如果文件不存在,则报错。

  5. “w+”:以读写方式打开文件,清空文件内容并从头编辑;同时该文件不存在还会自动创建文件

  6. “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() 用来读取文件,它将文件的全部内容当作一个长字符串保存在变量 contents 中。但是由于 read() 在 print 的时候会在末尾多打印一个空行,这是因为 read() 到达文件尾时返回一个空字符串,而这个空字符串显示出来就是一个空行,此时可以通过 rstrp() 来删除。

逐行读取

采用 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())

正则表达式

匹配规则

单个字符:

  1. \d :匹配数字,即 0-9       如:'00\d'可以匹配'007',但无法匹配'00A'

  2. \D :匹配非数字,即不是数字

  3. \w :匹配非特殊字符,即a-z、A-Z、0-9、汉字,常用的用来匹配字母和数字

  4. \W :匹配特殊字符,即非字母、非数字、非汉字

  5. . :匹配任意一个任意字符(除了\n)

  6. \s :匹配一个空白字符,即空格,tab键

  7. \S :匹配非空白字符

变长字符:

  1. *:表示任意个字符(包括0个)       \d* 表示任意个数字

  2. +:表示至少一个字符       \s+ 表示至少一个空白字符 \d+ …

  3. ?:表示0个或1个字符

  4. {n}:表示n个字符       \d{3}表示匹配3个数字,例如'010'

  5. {n,m}:表示 n-m 个字符       \d{3,8}表示3-8个数字,例如'1234567'

  6. [] :匹配 [ ] 中列举的字符,常用来精确匹配,举例如下:

  • [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])

其他字符

  1. ^表示行的开头,^\d表示必须以数字开头。

  2. $表示行的结束,\d$表示必须以数字结束。

  3. 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“]

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

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

相关文章

LeetCode刷题笔记【31】:动态规划专题-3(整数拆分、不同的二叉搜索树)

文章目录 前置知识343. 整数拆分题目描述解题思路代码进一步优化 96.不同的二叉搜索树题目描述解题思路代码优化改进 总结 前置知识 参考前文 参考文章: LeetCode刷题笔记【29】:动态规划专题-1(斐波那契数、爬楼梯、使用最小花费爬楼梯&…

召回和排序的样本构造问题

精排 正样本:曝光点击负样本:曝光未点击 粗排 正样本:曝光点击负样本:如果只复用精排的负样本,粗排模型对精排模型的拟合就会出现比较大的偏差。因为粗排打分高的item可能会被精排打低分,导致不能下发曝…

算法笔记——循环链表

带环链表 算法题中,会有一种题目让我们去判断链表里的是否有循环。 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 这里就需要我们要用快慢指针来进行搜索,直接提供代码 class Solution { public:bool hasCycle(ListNode *…

openwrt上/etc/localtime报错问题解决

笔者在openwrt上使用docker 搭建为知笔记服务端的时候碰到了/etc/localtime报错问题,解决过程记录如下: docker构建命令如下 docker run --name wiz --restartalways -it -d \ -v /opt/wizdata:/wiz/storage \ -v /etc/localtime:/etc/localtime \ -p 8666:80 \ -p…

Qt开发 入门

1.Qt概述 什么是Qt 不论我们学习什么样的知识点首先第一步都需要搞明白它是什么,这样才能明确当前学习的方向是否正确,下面给大家介绍一下什么是Qt。 Qt是一个跨平台的C应用程序开发框架 具有短平快的优秀特质: 投资少、周期短、见效快、效益高几乎支持…

VM-Linux基础操作命令

目录 基础知识: Linux的组成 命令执行的本质: 通配符: 终端 1.命令提示符 1.2.命令格式 例一:查看内核 例二: 查看内核版本 例三:查看shell类型 例四:查看IP地址 2.cd命令 3.查看帮…

蓝牙核心规范(V5.4)12.3-深入详解之LE GATT安全级别特征

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总 1.知识回顾 蓝牙协议GATT(Generic Attribute Profile)是蓝牙设备间进行数据交换的标准协议之一。GATT是一种基于服务(Service)和特性(Characteristic&…

摩尔纹是什么?如何消除摩尔纹?

相信很多小伙伴在渲染的时候会遇到各种各样的问题,比如摩尔纹,一张图片如果出现摩尔纹那基本就没法用了。那摩尔纹是什么呢?为什么会出现摩尔纹?又要如何消除摩尔纹呢?这篇文章我们就来探讨下。 一、摩尔纹是什么 官方…

记LGSVL Map Annotation(2)导入点云、以及地图

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式(PCD、PLY、LAS、LAZ)转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口,请在 Unity 编辑器中打开模拟器项目,然后导航到 Simulator/Import Point Cloud…

抓拍摄像机开关量控制4K高清手机远程看图建筑生长定时缩时相机

作为物联网数据采集解决方案专业提供商,数采物联网小编daq-iot 在这里做以下内容介绍,并诚挚的欢迎大家讨论和交流。 项目案例参考视频: https://www.bilibili.com/video/BV1Kp4y1T7wQ/?spm_id_from333.999.0.0 4K高清太阳能供电定时拍照相机,通过光…

c语言每日一练(15)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,上学期间将看学业情况更新。 五道选择题: 1、程序运行的结果…

【python绘图—colorbar操作学习】

文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar(颜色条)在绘图中的作用非常重要,它主要用于以下几个方面: 表示数据范围: Colorbar可以显示图中的颜色映射范围…

JS装饰器的介绍

装饰器的基本介绍 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,访问符,属性或参数上。 装饰器使用expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的…

嵌入式Linux驱动开发(I2C专题)(五)

I2C系统驱动程序模型 参考资料: Linux内核文档: Documentation\i2c\instantiating-devices.rstDocumentation\i2c\writing-clients.rst Linux内核驱动程序示例: drivers/eeprom/at24.c 1. I2C驱动程序的层次 I2C Core就是I2C核心层,它的作用&#xf…

一同走进Linux的“基操”世界

一同走进Linux的“基操”世界 众所周知,Linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发能力已经得到业界的认可,可以说,Linux现在就像是一个“当红明星”,其实力赢得了大多数人的赞同,流量…

C++红黑树

📟作者主页:慢热的陕西人 🌴专栏链接:C 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解了红黑树并且使用红黑树模拟实现set和map 文章目录 红黑…

嵌入式学习笔记(25)串口通信的基本原理

三根通信线:Tx Rx GND (1)任何通信都要有信息作为传输载体,或者有线的或则无线的。 (2)串口通信时有线通信,是通过串口线来通信的。 (3)串口通信最少需要2根&#xff…

Flask 使用 JWT(一)

下面是一些 JWT 的使用场景: 1、 授权:这是 JWT 最常的使用场景。一旦用户登录,后续的每个请求都必须携带 JWT ,允许用户携带 Token 访问所有的路由、服务器和资源。单点登录时目前使用最广泛的一个场景,因为它开销小并且能够轻易的实现跨域访问。 2、信息交换:JWT Token…

什么是数据安全和数据加密的关键技术和算法

1、什么是数据安全和数据加密的关键技术和算法。 数据安全和数据加密是保障数据完整性和机密性的重要手段。以下是数据安全和数据加密的关键技术和算法: 散列函数(Hash Function):散列函数是一种将任意长度的消息映射为固定长度…

【Python小练习】使用Python编写POC 脚本-上篇

文章目录 基本概念什么是Poc什么是Exp 常见问题Exp 和 Poc相同?为什么网上大多漏洞仅公开POC?为什么使用Python来编写 编写流程获取详情搭建环境复现漏洞编写脚本测试脚本 基本概念 什么是Poc Poc(全称: Proof Of Concept), 中文…