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之间不是小写字母
相关文章:
week03day03(文件操作、正则表达式1)
一、文件操作 1.数据持久化(数据本地化) -- 将数据保存在硬盘 程序中的数据默认是保存在运行内存中的,保存在运行内存中的数据在程序运行结束后会自动释放。如果希望在程序结束后,数据仍可以使用&…...

【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2023年全球气象站…...

数据结构—基础知识:哈夫曼树
文章目录 数据结构—基础知识:哈夫曼树哈夫曼树的基本概念哈夫曼树的构造算法哈夫曼树的构造过程哈夫曼算法的实现算法:构造哈夫曼树 数据结构—基础知识:哈夫曼树 哈夫曼树的基本概念 哈夫曼(Huffman)树又称最优树&…...
计算机网络(第六版)复习提纲24
3 传输控制协议TCP概述 A TCP最主要的特点 1 面向连接的传输层协议 2 每一条TCP连接只能有两个端点,且只能是点对点的 3 提供可靠交付的服务(无差错、不丢失、不重复、不乱序) 4 全双工通信,两端设有发送缓存和接收缓存 5 面向字节…...

[机器学习]TF-IDF算法
一.TF-IDF算法概述 什么是TF-IDF? 词频-逆文档频率(Term Frequency-Inverse Document Frequency,TF-IDF)是一种常用于文本处理的统计方法,可以评估一个单词在一份文档中的重要程度。简单来说就是可以用于文档关键词的提…...

Loadbalancer如何优雅分担服务负荷
欢迎来到我的博客,代码的世界里,每一行都是一个故事 Loadbalancer如何优雅分担服务负荷 前言Loadbalancer基础:数字世界的分配大师1. 分发请求:2. 健康检查:3. 会话保持:4. 可伸缩性:5. 负载均衡…...

计算机网络——链路层(1)
计算机网络——链路层(1) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家, [跳转到网站](https://www.captainbed.…...

OpenCV 0 - VS2019配置OpenCV
1 配置好环境变量 根据自己的opencv的安装目录配置 2 新建一个空项目 3 打开 视图->工具栏->属性管理器 4 添加新项目属性表 右键项目名(我这是opencvdemo)添加新项目属性表,如果有配置好了的属性表选添加现有属性表 5 双击选中Debug|x64的刚添加的属性表 6 (重点)添…...
eCos flash模拟EEPROM实现NV系统
Flash需要擦除的原因:先擦除后写入的原因是为了工业上制作方便,即物理实现方便。 #include <cyg/infra/diag.h> #include <cyg/io/flash.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> // SPI flash…...

【MongoDB】跨库跨表查询(python版)
MongoDB跨表跨库查询 1.数据准备:2.跨集合查询3.跨库查询应该怎么做? 讲一个简单的例子,python连接mongodb做跨表跨库查询的正确姿势 1.数据准备: use order_db; db.createCollection("orders"); db.orders.insertMan…...

Ruoyi-Cloud-Plus_Nacos配置服务漏洞CVE-2021-29441_官方解决方法以及_修改源码解决---SpringCloud工作笔记199
CVE-2021-29441 这个漏洞是Nacos的,通过使用postman,直接访问接口: 就可以直接添加nacos的用户 Nacos是Alibaba的一个动态服务发现、配置和服务管理平台。攻击者通过添加Nacos-Server的User-Agent头部将可绕过(nacos.core.auth.enabled=true)鉴权认证,从而进行API操作。 …...

和鲸科技与智谱AI达成合作,共建大模型生态基座
近日,上海和今信息科技有限公司(简称“和鲸科技”)与北京智谱华章科技有限公司(简称“智谱AI”)签订合作协议,双方将携手推动国产通用大模型的广泛应用与行业渗透,并积极赋能行业伙伴探索领域大…...

计算机网络实验五
目录 实验五 路由器基本配置 1、实验目的 2、实验设备 3、网络拓扑及IP地址分配 4、实验过程 (1)路由器设备名称的配置 (2)路由器每日提示信息配置 (3)路由器端口的IP地址配置 (4&…...
通过 React 来构建界面
1- 通过 React 来构建界面 第1步:下载所需要的二个库文件至本地,如果需要加载指定版本的 react 和 react-dom,可以把 18 替换成所需加载的版本号。 react.js:React中的核心库文件。 // 开发版 https://unpkg.com/react18/umd/rea…...

真机调试,微信小程序,uniapp项目在微信开发者工具中真机调试,手机和电脑要连同一个wifi,先清空缓存,页面从登录页进入,再点真机调试,这样就不会报错了
微信小程序如何本地进行真机调试?_unity生成的微信小程序怎么在电脑上真机测试-CSDN博客 微信小程序 真机调试 注意事项 uniapp项目在微信开发者工具中真机调试,手机和电脑要连同一个wifi,先清空缓存,页面从登录页进入…...

vue3快速入门
文章目录 1. Vue3简介1.1. 性能的提升1.2.源码的升级1.3. 拥抱TypeScript1.4. 新的特性 2. 创建Vue3工程2.1. 基于 vue-cli 创建2.2. 基于 vite 创建(推荐)vite介绍创建步骤项目结构安装插件项目结构总结 2.3. 一个简单的效果Person.vueApp.vue 3. Vue3核…...
go 问题记录(日志丢失)
问题描述: 在go程序中,通过执行一个命令启动一个子命令,并通过pipe读取子程序的标准输入和输出,通过scanner默认按行读取,此时如果子程序输出时没有携带’\n’,scanner就不会打印输出,而是会累…...

彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题
最近在编译一个比较老的项目,git clone 之后使用 async 之后出现一下现象: 首先确定是我网络本身是没有问题的,尝试几次重新 async 之后还是出现问题,网上找了一些方法解决了本问题,以此来记录一下问题是如何解决的。 …...

计算机网络第4章(网络层)
4.1、网络层概述 简介 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输 这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可 但是如果要将这些异构型网络互连起来,形成一个更大的互…...

SpringbootWeb案例
准备工作 需求说明 部门管理 部门管理功能开发包括:查询部门列表、删除部门、新增部门、修改部门 员工管理功能开发包括:查询员工列表(分页、条件)、删除员工、新增员工、修改员工 环境搭建 环境搭建步骤:1. 准备数据库表(dept、emp)…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...