week03day03(文件操作、正则表达式1)

一、文件操作                        

  1.数据持久化(数据本地化)   --  将数据保存在硬盘

  • 程序中的数据默认是保存在运行内存中的,保存在运行内存中的数据在程序运行结束后会自动释放。
  • 如果希望在程序结束后,数据仍可以使用,就必须把数据保存在硬盘中。硬盘中的数据除非人为删除或者硬盘损坏否则数据会一直存在。
  • 如果想要把数据保存到硬盘中必须把数据保存到文件中(文件是硬盘保存数据的基本单位)

   2. 常见的数据持久化工具

  • 数据库文件(.db  .sqlite) 、json文件、plist文件、txt文件、excel文件、 csv文件

   3. python如何做数据持久化 -- python如何将程序中数据保存到文件中、如何获取文件中的数据到程序中使用

           1.文件操作        ------  操作文件内容
           2. 文件操作基本步骤:
  •     第一步:打开文件
  •     第二步:操作文件内容(读写操作)
  •     第三步:关闭文件       

4.文件如何操作

1. 打开文件

'''
语法:open(file,mode = 'r', *, encoding=None)  -- 以指定方式打开指定文件a.   file       --- 字符串;需要打开的文件路径文件路径可以写绝对路径也可以写相对路径1. 绝对路径: 文件在计算机的全路径(windows是从盘名开始写,mac或者linux从系统根目录或者用户根目录开始写)open(r'/c:/names/users/abc/files/a.txt') #r 是电脑一般斜杠是反的 所以r确保斜杠对路径名需要引号框起来2.相对路径 :如果使用相对路径必须先将需要打开的文件直接或者间接放在项目里a.  用 .开头, .表示当前目录(当前代码文件所在文件夹)open('./files/data.txt') 相对路径如果以 './'开头,'./'可以省略b.  以 ..开头 ,用..表示当前目录上次目录b.     mode             字符串,文件的打开方式  -- 决定打开文件后能做什么(读?写?)决定操作文件的时候对应的数据的数据类型根据mode的功能他的值有两组:1. 第一组值   - 决定打开文件后能干什么(读还是写)r      - 只读w      - 只写;在打开文件时会清空文件内容a(append mode)     - 只写;在打开文件的时候会保留文件内容注意: 以读的方式打开一个不存在的文件程序会报错,以写的方式打开不存在文件不会报错 且会自动创建这个文件2. 第二组值      -- 决定操作文件的时候对应的数据的数据类型t -text mode(默认值)       - 读写数据必须是字符串b - 读写数据必须是字节(bytes) (一般是视频、音频、图片,非文本文件只能用b方式打开)注意: 给mode 赋值时候必须在两组值中每一组中选择一个,第二组值不选表示选t,两组值顺序不影响c.  encoding            编码方式: 1.gbk: 只支持英文、中文、韩文和日文编码,英文是单字节编码,用双字节存储一个中文字符2.utf-f: 支持所有语言,用三个字节存储一个中文字符3.(8bit = 1bytes 1kb =1024bytes  1mb = 1024kb  1G = 1024mb)不同文本文件编码方式在保存同一个字符的编码值的时候采用字节数可能不同使用文本文件编码方式的基本原则:将数据写入文件时使用的编码方式必须和读文件中内容时采用编码方式一致'''open('/Users/yaoxin/Documents/afile.txt' ) #绝对路径
open('./afile1.txt')  # afile1 和 我这个代码文件同级,所以直接当前目录就可以, ./也可以省略
open('../day03/afile1.txt') #当前代码文件上一级是week03,week03/day03/afile1f = open('afile1.txt','r')
f.read()
f.write('phth') #会报错,因为现在是r(只读模式)f = open('afile1.txt','a')
f.read() #报错,现在是append mode 模式,
f.write('python') 只写,且会在原文件内容后添加f = open('afile1.txt','w')  # 打开时,原文件内容会被清空,如果文件不存在,会自动创建f = open('afile1.txt','rt')
result = f.read()
print(type(result)) # strf = open('afile1.txt','rb')
result = f.read()
print(type(result)) # bytes

1.1 自动关闭(with open)   

with open('../day03/afile1.txt','r',encoding='utf-8') as f:print(f.read())

  2. 文件读操作

     a.  文件对象.read()        --- 获取整个文件内容,并返回(从文件读写位置开始读到文件结束,文件读写位置默认在文件开头)
  •      读取一次后,再赋值再read,是没结果的。 需要重新open一次,或者移动光标到开头,用seek(0), 下面是事例
f = open('afile1.txt', 'rt',encoding='utf-8')
result = f.read()
print(result)## 这样再赋值无结果
result1 = f.read()
print(result1) # 再open一次,可以再输出
f = open('afile1.txt', 'rt',encoding='utf-8')
result = f.read()
print(result)#或者seek(0) 移动到开头f.seek(0)
result1 = f.read()
print(result1)
      b. 文件对象.readline()     ---  读取一行内容
f = open('afile1.txt', 'rt',encoding='utf-8')
#result = f.readline()
print(f.readline()) #hellohello世界hello世界hello世界hello世界hello世界hhellohello
print(f.readline()) #dfdfdfdf的大方大方
print(f.readline()) #print(f.readline())
    练习:循环打印afile1 所有内容
f = open('afile1.txt', 'rt',encoding='utf-8')
while True:result = f.readline()print(result)if not result:break

3. 文件写操作

  •  文件对象. write(内容)
f = open('afile1.txt', 'wt',encoding='utf-8')
f.write('你好世界')

4. 关闭文件

  • 文件对象.close( )
f = open('afile1.txt', 'r',encoding='utf-8')
print(f.read())f.close()
  • 已经关闭的文件不能再进行读写操作

二. 应用

1. 如何实现程序中的数据持久化

  • 第一步:确定需要做持久化的数据是什么
  • 第二步:确定保存数据的文件( 文件叫什么名字、文件类型、文件位置、文件的初始内容是什么)
  • 第三步:做到在程序中需要这个持久化数据的时候从文件中去读这个数据;当这个数据变化的时候需要把最新的数据更新到文件中。

案例: 写程序打印程序启动的次数

#count.txt 的内容就是0
#获取保存在文件中上一次程序的启动次数
f = open('count.txt','r',encoding='utf-8')
count = int(f.read()) #count 文件里就只有一个0,读取他出来
f.close()count += 1
print(count)# 将最新的次数更新到文件中
f = open('count.txt','w', encoding='utf-8')
f.write(str(count)) #count 是int 要转换成 str才可以写入
f.close()

练习:

# 练习1:写程序录入学生的名字,录入完后打印目前已经录入过的所有的学生的名字(每次运行程序只录入一个)
"""
请输入学生的名字:小名
小名


请输入学生的名字: 张三
小名  张三

请输入学生的名字: 李四
小名  张三 李四
...
"""

录入学生的名字,录入完后打印目前已经录入过的所有的学生名字

student_name = input('请输入学生的姓名:')
file1 = open('afile1.txt','at',encoding='utf-8')
file1.write(student_name)
  • 需要持久化的数据是:所有录入学生的姓名
  • txt文件可以保存名字

# 练习2:写程序录入学生的名字,录入完后打印目前已经录入过的所有的学生的名字,但是每个名字只能录入一次!

student_name = input('请输入学生的姓名:')# 读取文件内容
file1 = open('afile1.txt', 'rt', encoding='utf-8')
file1_content = file1.read()
file1.close()if student_name in file1_content:print('名字已经存在')
else:file1 = open('afile1.txt', 'at', encoding='utf-8')file1.write(student_name + ' ')file1.close()print('名字已添加到文件中')# 重新读取文件内容并打印
file1 = open('afile1.txt', 'rt', encoding='utf-8')
updated_content = file1.read()
file1.close()
print(updated_content)

三. 正则表达式

 1. 正则表达式的定义:

  •   正则表达式是一种可以让复杂的字符串问题变得简单的工具
  • 不管通过正则表达式解决的是什么样的字符串问题,写正则表达式都是在描述字符串规则

2.python中正则相关的基本工具

  • re模块  -- 是python自带的模块,这个模块中提供了各种各样和正则相关的函数

  •  fullmatch函数: fullmatch(正则表达式, 字符串)      ---  判断整个字符串是否符合正则表达式所描述的规则,如果不符合结果为None, 符合结果是匹配对象

  • python中正则表达式写法: r‘正则表达式内容’

3.正则符号

1. 普通符号: 在正则表达式中表示符号本身符号就是普通符号
result = fullmatch(r'abc','abc')
print(result)
2.   ‘ . ’  匹配任意一个字符,(长度也需要匹配)
# . 表示任意字符, 就是说第一个随便是什么,后面两个是 bc 就行,长度也要匹配
result = fullmatch(r'.bc','kbc')
print(result)result = fullmatch(r'..bc..','abbcld')
print(result)
3.  ‘ \d ’   匹配任意一个数字字符  (digit)
result = fullmatch(r'\dbc','9bc')
print(result)#任意三个数字字符
result = fullmatch(r'\d\d\d','365')
print(result)
4.  \s       匹配任意一个空白字符(包括空格、\n  \t)
result = fullmatch(r'\d\s\d','2\n5')
print(result)
5.  \w        匹配任意一个数字、字母、下划线或中文
result = fullmatch(r'1\w3','1是3')
print(result)
6.  \D 、 \S 、\W
  • \D :匹配任意一个非数字字符
  • \S  :  匹配任意一个非空白字符
  • \W :  匹配任意一个非(数字、字母、下划线或着中文)
7.   [字符集]         ---  匹配在字符集中的任意一个字符
result = fullmatch(r'1[abc]2','1c2')
print(result)
  • 匹配abc 中任意一个字符都可以
  • [\dMN]  匹配任意一个数字和MN
  • r'a[3-9]b'  a和b 中间 3-9中任意一个 ,  r‘1[a-zA-Z]2’ , 1和2 之间是任意一个小写或大写字母, 加空格的话,就是或的意思
  • r'1[\da-fMN]3'  , 三个字符,中间的可以是数字,也可以是a-f的任意一个,或者MN
8. [^字符集]   --- 匹配不在字符集的任意字符
  • r'1[^a-z]2'    1和2之间不是小写字母

   

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

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

相关文章

新春送福,暖心探访

春节将至,岁寒情暖。为了深入了解辖区困境老人的生活状况和真实需求,让困境老人感受到党和政府的关爱与温暖,营造幸福和谐的节日气氛。2024年1月31日下午,在长沙市湘江新区民政与社会保障局的支持下,学联社区携手长沙市…

dockers- php

在Dockerfile里面安装php7.4的GD库 - 知乎

Https加密超文本传输协议的运用

一、https的相关知识 1.1 https的简介 HTTPS (全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加…

基于微服务的高考志愿智能辅助决策系统(附源码)

目录 一.引言 1、编写目的 2、系统功能概述 二.功能分析 三.微服务模块 1、微服务用户相关模块 (1)用户注册 (2)用户登录 (3)用户信息管理 (4)用户操作 2、微服务文件云存…

React Router 完美教程(下)

我们书接上回,继续我们的React Router 路由之路: 我们到目前为止都没有用到 state、useEffect、redux等状态管理器。但也达到了我们的设计目的。 注意,action 返回的结果 可以在组件中使用 useActionData() 来获取。就像 useLoaderData() 的使…

Linux上使用OpenCvSharp

前言 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS。OpenCvSharp是一个OpenCV的 .Net wrapper,应用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenC…

STL - string类

1、标准库中的string类 1.1、string类了解 字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性string类是使用char (即作为它的字符类型,使用…

MD5算法:高效安全的数据完整性保障

摘要:在数字世界中,确保数据完整性和安全性至关重要。消息摘要算法就是一种用于实现这一目标的常用技术。其中,Message Digest Algorithm 5(MD5)算法因其高效性和安全性而受到广泛关注。本文将详细介绍MD5算法的优缺点…

web应用课——(第四讲:中期项目——拳皇)

代码AC Git地址:拳皇——AC Git链接

Maven:一些常见问题

1、ReasonPhrase: Forbidden a.注意用户的权限以及角色role的设置,一般是没有权限才会被禁止的。 2、Failed to collect dependencies a.需要把parent工程,也就是package是pom的那个工程先install一下,或者deploy b.需要注意在设置的工厂里面…

87 SpringMVC 上传文件在业务代码中拿不到文件数据

前言 呵呵 最近在整理文件上传部分的东西的时候, 发现了一个问题 文件上传部分 有一些基础的问题, 可以参见 29 SpringMVC 上传文件未生成临时文件, 我们这里上传的文件的大小是 大于 sizeThreshold 的 SpringMVC 上传文件的时候会生成一个临时文件, 我想直接使用这个临时…

【开源】SpringBoot框架开发海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

【DB2】—— 一次关于db2 sqlcode -420 22018的记录

情况描述 在DB2 10.5数据库中执行以下SQL语句: SELECT * FROM aa WHERE aa.ivc_typ IN (213,123,12334,345)其中aa.ivc_typ列的类型为VARCHAR(10) 关于执行会发生以下情况 类型转换:SQL引擎会尝试把IN列表中的整数常量转换为VARCHAR(10)类型&#xf…

【从浅到深的算法技巧】优先队列

5.6 优先队列 许多应用程序都需要处理有序的元素,但不一定要求它们全部有序, 或是不一定要一次就将它们排序。很多情况下我们会收集一些元素, 处理当前键值最大的元素,然后再收集更多的元素,再处理当前键值最大的元素&…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言修改鼠标光标和中心提示图鼠标光标素材修改默认鼠标光标修改中心提示图 拾取提示弹窗简单绘制UI拾取弹窗功能 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使…

canvas的一些基础

在 Canvas 中,基本图形有两种:直线图形和曲线图形 直线图形:直线、矩形(描边矩形和填充矩形)、多边形 曲线图形:曲线和弧线(弧线是圆的一部分,曲线则不一定,弧线上的每个点都具有相同的曲率&…

3D Gaussian Splatting-实时辐射场渲染技术

引用自:https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_high.pdf 概述: 该论文介绍了一种用于实时辐射场渲染的3D高斯点渲染技术。 其基本原理是: 一:首先从SfM校准的图像及其对应的稀疏点云…

十分钟快速上手Spring Boot与微信小程序API接口的调用,快速开发小程序后端服务

1.1 微信小程序API接口介绍 微信小程序API接口是连接小程序前端与后端服务器的桥梁,它提供了丰富的功能接口,包括用户信息、支付、模板消息、数据存储等。这些API接口能够满足开发者在小程序中实现各种复杂业务逻辑的需求。 用户信息接口 用户信息接口…

计算机服务器中了locked勒索病毒怎么办,locked勒索病毒解密流程

随着网络技术在企业生产生活中的应用,越来越多的企业开始走向数字化办公模式,极大地提升了企业办公与生产效率,而其中的企业数据起到了关键性作用,企业的数据安全是众多企业关心的话题。但网络是一把双刃剑,近期&#…

【C++】开源:Windows图形库EasyX配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Windows图形库EasyX配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#…