Day14_文件操作
一、数据存储
1.1 计算机数据存储
计算机内存分为运行内存和硬盘两种:保存在运行内存中的数据在程序运行结束后会自动释放,保存在硬盘中的数据会一直存在(除非手动删除或者硬盘损坏)
1)打开文件
open(文件路径, 文件打开方式=‘r’, encoding=文本文件编码方式)
1.文件路径 - 文件在计算机中的位置信息。
文件路径分为两种,分别是绝对路径和相对路径:
1)绝对路径:文件在计算机中的全路径
2)相对路径:
注意:使用相对路径之前需要先将被操作的文件放在目录中
a. 在写路径的时候用 . 表示当前目录(当前目录指的是当前写代码的代码文件所在的文件夹)
b. 在写路径的时候用 … 表示当前目录的上层目录
注意:路径是以’./‘开头的时候,’./可以省略’
# 使用绝对路径
open(r'E:\CDPython\02语言基础\homework\data1.txt')# 使用相对路径
open(r'./files/data1.txt')
open(r'../day14-fileOperation/files/data1.txt')
2.文件打开方式 - 决定了打开文件后能做什么(是能读还是能写?);还决定操作文件的时候数据的类型(是字符串还是二进制?)
第一组值:r、w、a
r - 只读;如果文件不存在会直接报错
w - 只写,打开的时候会先清空原文件;文件不存在会创建文件
a - 只写,打开的时候不会清空原文件;文件不存在会创建文件
第二组值:t、b
t - 字符串类型(读到的数据,和写入文件中的数据必须是字符串)
b - 二进制类型(bytes;读到的数据,和写入文件中的数据必须是二进制)(二进制文件只能用b打开)
给打开方式赋值的时候必须在两组值中每一组选一个值,如果第二组不选默认选择 t:
rt(tr、r)、rb(br)、wt(tw、w)、wb(bw)、at(ta、a)、ab(ba)
# -----r是只读-----
f = open('files/data1.txt', 'r')
f.read()
# f.write('abc') # 报错!# ----a是只写,并且不会清空原文件---
f = open('files/data1.txt', 'a')
# f.read() # 报错!
f.write('abc')# ---w是只写,并且会清空源文件
f = open('files/data1.txt', 'w')
f.write('abc')
f.read() # 报错!# ----r打开不存在的文件程序报错-----
f = open('files/data2.txt', 'r')# ----w 和 a 打开不存在的文件的时候不会报错,并且会自动创建这个文件
f = open('files/data2.txt', 'w')
f = open('files/data3.txt', 'a')# --------------- t - 数据的类型是字符串 ---------------
f = open('files/data1.txt', 'rt')
result = f.read()
print(type(result)) # <class 'str'>f = open('files/data1.txt', 'at')
f.write('abc')
补充:常见计算机内存单位
位(bit)
1字节(bytes) = 8位
1kb = 1024字节
1mb = 1024kb
1G = 1024mb
1T = 1024G
3)文本文件编码方式
不同的文本文件编码方式,在保存同一个符号的编码值的时候采用的字节数不同
常见的文本文件编码方式:utf-8(推荐)、gbk
utf-8: 一个数字和字母采用一个字节保存;一个中文用3个字节
gbk: 一个数字和字母采用一个字节保存;一个中文用2个字节
使用编码方式的要求:前后一致(存储数据的时候采用编码值必须和获取数据的时候采用编码值一致)
注意:以b的方式打开文件,encoding不能赋值
f = open('files/data4.txt', 'w', encoding='utf-8')
f.write('hello! 世界')f = open('files/data4.txt', 'r', encoding='utf-8')
print(f.read()) # hello! 世界!f = open('files/data4.txt', 'r', encoding='gbk')
print(f.read())f = open('files/data4.txt', 'w', encoding='gbk')
f.write('hello!世界!')f = open('files/data4.txt', 'r', encoding='gbk')
print(f.read())f = open('files/data4.txt', 'r', encoding='utf-8')
print(f.read())
'''
with open(文件路径, 打开方式, encoding=文本文件编码方式) as 文件对象:代码块
'''with open('./files/data.txt', 'a', encoding='utf-8') as f:f.write('abc')f.write('\n')f.write('123')
2)操作文件
1.文件读操作 (获取文件内容)
a. 文件对象.read() - 获取整个文件内容(从读写位置开始获取文件结束,读写位置默认文件开头)
b. 文件对象.readline() - 从读写位置开始读到一行结束(只针对文本文件有效)
注意:读操作会改变读写位置
文件对象.seek(0) - 将读写位置移动到文件开头
2.文件写操作 (包括增加内容、修改内容、删除内容)
a. 文件对象.write(内容) - 将指定内容写入到指定文件中
3.关闭文件
文件对象.close()
f = open('files/data1.txt', encoding='utf-8')
result = f.read()
print(result)f.seek(0)
result = f.read()
print(result)f.seek(0)
# print(f.readline())
# print(f.readline())
# print(f.readline())
# print(f.readline())
# result = f.readline() # ''
# print(type(result), len(result))# 练习:读文件内容,一行一行的读,读完为止
# def get_file_content():
# f = open('files/data1.txt', encoding='utf-8')
# while True:
# result = f.readline()
# if result == '':
# break
# yield result
#
#
# reader = get_file_content()
# print(next(reader))
# print(next(reader))f = open('files/data2.txt', 'w', encoding='utf-8')
f.write('Python')
f.close()
# f.write('\nJava')
1.2 数据持久化 - 以文件为单位,将数据保存到硬盘中
数据持久化又叫数据本地化,指的就是将程序中的数据保存在硬盘中(程序中的数据默认是保存在运行内存中的)。
硬盘保存数据的基本单位是文件,所以如果想要把数据保存到硬盘中,就需要将数据保存到文件中。
常见的数据持久化:数据库(.db、.sqlite)、excel文件、csv文件、txt文件、json文件、plist文件等
1.3 文件操作 - 操作文件内存
文件操作基本步骤:打开文件 -> 操作文件内容(读操作、写操作) -> 关闭文件
二、应用
2.1 数据持久化方法 - 让这次运行程序产生的数据可以下一次运行程序的时候使用
第一步:确定需要持久化的数据
第二步:创建文件,并且确定文件初始内容
第三步:做到在程序中需要这个数据的时候从文件中获取这个数据
第四步:做到这个数据如果发生改变,必须将最新的数更新到文件中
# 案例1:写程序打印程序运行次数
# 获取上一次的运行次数
f = open('files/RunTime.txt', encoding='utf-8')
count = int(f.read())
f.close()# 再让次数加1
count += 1# 打印次数
print(count)# 更新文件内容
f = open('files/RunTime.txt', 'w', encoding='utf-8')
f.write(str(count))# 练习1:
"""
请输入需要添加的学生的名字:小明
小明请输入需要添加的学生的名字:小花
小明 小花请输入需要添加的学生的名字:张三
小明 小花 张三....
"""
# 需要持久化的数据:已经添加过的所有的学生的名字
name = input('请输入学生的名字:')try:f = open('files/studentName.txt', encoding='utf-8')all_student = f.read()f.close()
except FileNotFoundError:all_student = ''all_student += name + ' '
print(all_student)f = open('files/studentName.txt', 'w', encoding='utf-8')
f.write(all_student)
f.close()"""
姓名: 小明
性别: 男
年龄: 18
打印: [{'name': '小明', 'gender': '男', 'age': 18}]姓名: 小花
性别: 女
年龄: 20
打印: [{'name': '小明', 'gender': '男', 'age': 18}, {'name': '小花', 'gender': '女', 'age': 20}]
"""
# 需要持久的数据:所有已经添加的学生信息
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))# 获取之前添加过的所有的学生
try:f = open('files/学生信息.txt', encoding='utf-8')all_student = eval(f.read())f.close()
except FileNotFoundError:all_student = []all_student.append({'name': name, 'gender': gender, 'age': age})print(all_student)f = open('files/学生信息.txt', 'w', encoding='utf-8')
f.write(str(all_student))
f.close()
相关文章:
Day14_文件操作
一、数据存储 1.1 计算机数据存储 计算机内存分为运行内存和硬盘两种:保存在运行内存中的数据在程序运行结束后会自动释放,保存在硬盘中的数据会一直存在(除非手动删除或者硬盘损坏) 1)打开文件 open(文件路径, 文件打开方式‘r’, encod…...
leetcode 轮转数组 189
题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2…...
Leetcode.1849 将字符串拆分为递减的连续值
题目链接 Leetcode.1849 将字符串拆分为递减的连续值 Rating : 1747 题目描述 给你一个仅由数字组成的字符串 s。 请你判断能否将 s拆分成 两个或者多个 非空子字符串 ,使子字符串的 数值 按 降序 排列,且每两个 相邻子字符串 的数值之 差 …...

Android布局层级过深为什么会对性能有影响?为什么Compose没有布局嵌套问题?
做过布局性能优化的同学都知道,为了优化界面加载速度,要尽可能的减少布局的层级。这主要是因为布局层级的增加,可能会导致测量时间呈指数级增长。 而Compose却没有这个问题,它从根本上解决了布局层级对布局性能的影响: Compose界…...

【UR机械臂CB3 网络课程 】
【UR机械臂CB3 网络课程 】1. 前言2. 概览:特色与术语2.1 机器人组成2.1.1控制柜2.1.2 UR 机器人手臂2.2 接通机器人电源2.3 移动机械臂3. 机器人如何工作3.1 选择臂端工具3.2 输入有关臂端工具的信息3.3 连接外部装置3.4 机器人编程4. 设置工具4.1 末端执行器配置4.2 工具中心…...
dp-统计字典序元音字符串的数目
给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。 字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i1] 相同或在 s[i1] 之前。 示例 1: 输入&…...

LFM雷达实现及USRP验证【章节3:连续雷达测距测速】
第一章介绍了在相对速度为0时候的雷达测距原理 目录 1. LFM测速 1.1 雷达测速原理 1.2 Chrip信号测速 2. LFM测速代码实现 参数设置 仿真图像 matlab源码 代码分析 第一章介绍了在相对速度为0时候的雷达测距原理,第二章介绍了基于LFM的雷达测距原理及其实现…...

COLMAP多视角视图数据可视化
这篇博文主要介绍多视角三维重建的实用工具COLMAP。为了让读者更快确定此文是否为自己想找的内容,我先用简单几句话来描述此文做的事情: 假设我们针对一个物体(人)采集了多个(假设60个)视角的照片ÿ…...
2023年全国最新高校辅导员精选真题及答案36
百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 92.校园文化形成与发展的主要影响因素有() A.学校的领导与管理活…...

ThreeJS-全屏和退出全屏、自适应大小(五)
下载新得组件 npm install gsap -S 新引入 import gsap from gsap //动画控制 代码: <template> <div id"three_div"> </div> </template> <script> import * as THREE from "three"; import {OrbitControls } f…...
等级保护2.0要求及所需设备清单
等级保护的工作流程包括定级、备案、建设整改、等级测评,核心思想在于建立“可信、可控、可管”的安全防护体系,使得系统能够按照预期运行,免受信息安全攻击和破坏。 三级等保要求及所需设备 三级等级保护指标项: 物理访问控制…...

【大数据之Hadoop】六、HDFS之NameNode、Secondary NameNode和DataNode的内部工作原理
NN和2NN的内部工作原理 对于NameNode的存放位置: 内存中:好处:计算快 坏处:可靠性差,断电后元数据会丢失 磁盘中:好处:可靠性搞 坏处:计算慢 内存磁盘中:效率低 所以设…...

小黑子—Java从入门到入土过程:第四章
Java零基础入门4.0Java系列第四章1. 顺序结构2. if语句3. switch 语句3.1 default的位置和省略3.2 case 穿透3.3 switch 新特性 (jdk12开始)4. for 循环5. while 循环6.do...while 循环7. 无限循环8. 跳转控制语句9. 练习9.1 逢七过9.2 平方根9.3 求质数…...

数据库原理及应用(四)——SQL语句(2)SQL基础查询以及常见运算符
一、SELECT语句基础 数据库查询是数据库的核心操作,SELECT 语句用于从数据库中选取数据。 SELECT [ALL/DISTINCT] <列名>,<列名>...FROM <表名或视图名>,<表名或视图名>[WHERE <条件表达式>][GROUP BY <列名1> [HAVING <条…...

(算法基础)Floyd算法
适用情景Floyd算法适用于多源汇最短路,也就是他问你比如说从3号点到6号点的最短路距离,比如说从7号点到20号点的最短路距离,而不是单源最短路(从1号点到n号点的最短路距离)。在这个算法当中允许负权边的存在。但在求最…...

SQL语法:浅析select之七大子句
Mysql版本:8.0.26 可视化客户端:sql yog 目录一、七大子句顺序二、演示2.1 from语句2.2 on子句2.3 where子句2.4 group by子句2.4.1 WITHROLLUP,加在group by后面2.4.2 是否可以按照多个字段分组统计?2.4.3 分组统计时,…...

中国人民大学与加拿大女王大学金融硕士——去有光的地方,并成为自己的光
光是我们日常生活中一个重要的元素,试想一下如果没有光,世界将陷入一片昏暗。人生路亦是如此,我们从追逐光、靠近光、直到自己成为光。人民大学与加拿大女王大学金融硕士项目是你人生路上的一束光吗 渴望想要成为一个更好的人,就…...

Python数据结构与算法篇(五)-- 二分查找与二分答案
1 二分法介绍 1.1 定义 二分查找又称折半查找、二分搜索、折半搜索等,是一种在静态查找表中查找特定元素的算法。 所谓静态查找表,即只能对表内的元素做查找和读取操作,不允许插入或删除元素。 使用二分查找算法,必须保证查找表中…...

小游戏也要讲信用
当下,小游戏鱼龙混杂,官方为能更好地保护用户、开发者以及平台的权益,近日宣布7月1日起试行小游戏主体信用分机制。 主体信用分是什么呢?简单来说,这是针对小游戏主体下所有小游戏帐号行为,对开发者进行评…...
贪心算法11
1. 贪心算法的概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

生信服务器 | 做生信为什么推荐使用Linux服务器?
原文链接:生信服务器 | 做生信为什么推荐使用Linux服务器? 一、 做生信为什么推荐使用服务器? 大家好,我是小杜。在做生信分析的同学,或是将接触学习生信分析的同学,<font style"color:rgb(53, 1…...

深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...
【Java基础】向上转型(Upcasting)和向下转型(Downcasting)
在面向对象编程中,转型(Casting) 是指改变对象的引用类型,主要涉及 继承关系 和 多态。 向上转型(Upcasting) ⬆️ 定义 将 子类对象 赋值给 父类引用(自动完成,无需强制转换&…...
Vuex:Vue.js 应用程序的状态管理模式
什么是Vuex? Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在大型单页应用中,当多个组件共享状态时,简单的单向数据流…...

如何优雅地绕过限制调用海外AI-API?反向代理与API中转技术详解
阅读时长 | 8分钟 适用读者 | 需要跨境调用OpenAI等AI服务的开发者/企业 一、问题背景:为什么需要代理? 最近在技术社区看到这样的求助: "公司服务器在国内,但业务需要调用OpenAI接口,直接访…...

基于微信小程序的作业管理系统源码数据库文档
作业管理系统 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和微信小程序来完成对系统的…...