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. 贪心算法的概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
