python基础语法(十一)

news2024/11/28 2:30:15

目录

  • 文件
    • 文件是什么
    • 文件路径
    • 文件操作
      • 1. 打开文件
      • 关闭文件
      • 写文件
      • 读文件
    • 关于中文的处理
    • 使用上下文管理器

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒个人主页
🥸🥸🥸C语言
🐿️🐿️🐿️C语言例题
🐣🐓🏀python

文件

文件是什么

变量是把数据保存到内存中. 如果程序重启/主机重启, 内存中的数据就会丢失.

要想能让数据被持久化存储, 就可以把数据存储到硬盘中. 也就是在文件中保存

在 Windows “此电脑” 中, 看到的内容都是 文件

通过文件的后缀名, 可以看到文件的类型. 常见的文件的类型如下:
文本文件 (txt)
可执行文件 (exe, dll)
图片文件 (jpg, gif)
视频文件 (mp4, mov)
office 文件 (.ppt, docx)

文件路径

一个机器上, 会存在很多文件, 为了让这些文件更方面的被组织, 往往会使用很多的 “文件夹”(也叫做目录)来整理文件

实际一个文件往往是放在一系列的目录结构之中的

为了方便确定一个文件所在的位置, 使用文件路径来进行描述

举个例子:我们用Everthing来搜索QQ的一些文件(这里顺便推荐一下,用Everthing搜索文件非常的方便)
在这里插入图片描述
我们可以看到红线所标记的就是文件的路径
在这里插入图片描述

D: 表示 盘符. 不区分大小写.

每一个 \ 表示一级目录. 当前 QQ.exe 就是放在 “D 盘下的 program 目录下的 qq 目录下的 Bin 目录中” .

目录之间的分隔符, 可以使用 \ 也可以使用 / . 一般在编写代码的时候使用 / 更方便.

上述以 盘符 开头的路径, 我们也称为 绝对路径.

除了绝对路径之外, 还有一种常见的表示方式是相对路径.

相对路径需要先指定一个基准目录, 然后以基准目录为参照点, 间接的找到目标文件.

描述一个文件的位置, 使用绝对路径和相对路径都是可以的. 对于新手来说, 使用 绝对路径更简单更好理解, 也不容易出错

文件操作

要使用文件, 主要是通过文件来保存数据, 并且在后续把保存的数据读取出来.

但是要想读写文件, 需要先 “打开文件”, 读写完毕之后还要 “关闭文件”

1. 打开文件

使用内建函数 open 打开一个文件

f = open('d:/test.txt', 'r')

第一个参数是一个字符串, 表示要打开的文件路径

第二个参数是一个字符串, 表示打开方式. 其中 r 表示按照读方式打开. w 表示按照写方式打开. a表示追加写方式打开.

如果打开文件成功, 返回一个文件对象. 后续的读写文件操作都是围绕这个文件对象展开.

如果打开文件失败(比如路径指定的文件不存在), 就会抛出异常

关闭文件

使用 close 方法关闭已经打开的文件.

f.close()

使用完毕的文件要记得及时关闭

一个程序能同时打开的文件个数, 是存在上限的.

flist = []
count = 0
while True:
	f = open('d:/test.txt', 'r')
	flist.append(f)
	count += 1
	print(f'count = {count}')

如上面代码所示, 如果一直循环的打开文件, 而不去关闭的话, 就会出现上述报错.

当一个程序打开的文件个数超过上限, 就会抛出异常.

注意: 上述代码中, 使用一个列表来保存了所有的文件对象. 如果不进行保存, 那么 Python 内置的垃圾回收机制, 会在文件对象销毁的时候自动关闭文件.

但是由于垃圾回收操作不一定及时, 所以我们写代码仍然要考虑手动关闭, 尽量避免依赖自动关闭

写文件

文件打开之后, 就可以写文件了.

写文件, 要使用写方式打开, open 第二个参数设为 ‘w’

使用 write 方法写入文件

f = open('d:/test.txt', 'w')
f.write('hello')
f.close()

用记事本打开文件, 即可看到文件修改后的内容.

如果是使用 ‘r’ 方式打开文件, 则写入时会抛出异常

f = open('d:/test.txt', 'r')
f.write('hello')
f.close()

使用 ‘w’ 一旦打开文件成功, 就会清空文件原有的数据.

使用 ‘a’ 实现 “追加写”, 此时原有内容不变, 写入的内容会存在于之前文件内容的末尾

f = open('d:/test.txt', 'w')
f.write('hello')
f.close()
f = open('d:/test.txt', 'a')
f.write('world')
f.close()

针对已经关闭的文件对象进行写操作, 也会抛出异常

f = open('d:/test.txt', 'w')
f.write('hello')
f.close()
f.write('world')

读文件

读文件内容需要使用 ‘r’ 的方式打开文件

使用 read 方法完成读操作. 参数表示 “读取几个字符”

f = open('d:/test.txt', 'r')
result = f.read(2)
print(result)
f.close()

如果文件是多行文本, 可以使用 for 循环一次读取一行.

先构造一个多行文件

f = open('d:/test.txt', 'r')
for line in f:
	print(f'line = {line}')
f.close()

注意: 由于文件里每一行末尾都自带换行符, print 打印一行的时候又会默认加上一个换行符, 因此打印结果看起来之间存在空行.

使用 print(f’line = {line}‘, end=’') 手动把 print 自带的换行符去掉

使用 readlines 直接把文件整个内容读取出来, 返回一个列表. 每个元素即为一行

f = open('d:/test.txt', 'r')
lines = f.readlines()
print(lines)
f.close()

关于中文的处理

当文件内容存在中文的时候, 读取文件内容不一定就顺利.

同样上述代码, 执行时可能会出现异常,也有可能出现乱码

计算机表示中文的时候, 会采取一定的编码方式, 我们称为 “字符集”

所谓 “编码方式” , 本质上就是使用数字表示汉字.

我们知道, 计算机只能表示二进制数据. 要想表示英文字母, 或者汉字, 或者其他文字符号, 就都要通过编码.

最简单的字符编码就是 ascii. 使用一个简单的整数就可以表示英文字母和阿拉伯数字.

但是要想表示汉字, 就需要一个更大的码表.

一般常用的汉字编码方式, 主要是 GBK 和 UTF-8

必须要保证文件本身的编码方式, 和 Python 代码中读取文件使用的编码方式匹配, 才能避免出现上述问题

使用记事本打开文本文件, 在 “菜单栏” -> “文件” -> “另存为” 窗口中, 可以看到当前文件的编码方式

在这里插入图片描述
如果此处的编码为 ANSI , 则表示 GBK 编码.

如果此处为 UTF-8 , 则表示 UTF-8 编码

此时修改打开文件的代码, 给 open 方法加上 encoding 参数, 显式的指定为和文本相同的字符集, 问题即可解决.

f = open('d:/test.txt', 'r', encoding='utf8')

字符编码问题, 是编程中一类比较常见, 又比较棘手的问题. 需要对于字符编码有一定的理解, 才能从容应对.

使用上下文管理器

打开文件之后, 是容易忘记关闭的. Python提供了上下文管理器 , 来帮助程序猿自动关闭文件

使用 with 语句打开文件.

当 with 内部的代码块执行完毕后, 就会自动调用关闭方法

with open('d:/test.txt', 'r', encoding='utf8') as f:
	lines = f.readlines()
	print(lines)

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

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

相关文章

串行原理编程,中文编程工具中的串行构件,串行连接操作简单

串行通信原理编程,中文编程工具中的串行通信构件,串行通信连接设置简单 编程系统化课程总目录及明细,点击进入了解详情。https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502 串行端口 是串行的基础&#…

第22天:time模块与datetime模块

time模块 时间的三种格式: 1. 时间戳:从1970年1月1号到现在的秒数,他是一个数字 2. 结构化时间: 不是让我们看的,让计算机看的,他是时间之间相互转换的时候的中间桥梁 3. 格式化时间:就是符…

【贝叶斯回归】【第 1 部分】--pyro库应用

Bayesian Regression - Introduction (Part 1) — Pyro Tutorials 1.8.6 documentation 一、说明 我们很熟悉线性回归的问题,然而,一些问题看似不似线性问题,但是,用贝叶斯回归却可以解决。本文使用土地平整度和国家GDP的关系数据…

栈、共享栈、链式栈(C++实现)

文章目录 前言1. 栈的顺序存储(顺序栈)2. 栈的基本操作🍑 入栈操作🍑 出栈操作🍑 获取栈顶元素🍑 获取栈的长度🍑 判断是否为空栈🍑 判断栈是否满了🍑 打印栈内的元素&am…

『VUE2 - 车牌号软键盘』

一、需求描述 在 VUE2 Vant2 的项目中,实现 车牌号软键盘 的功能。 二、引入全局组件 引入封装好的 vant-number-plate 组件,整个文件夹放在 src/components 里面: git clone https://gitee.com/csheng-gitee/vant-number-plate.git三、具…

IMYAI-人工智能聊天绘画机器人4.0 - 终身学习者的超级生产力工具!

什么是ChatGPT?ChatGPT能帮我干什么? 在开始之前,我们首先需要知道ChatGPT是什么。 ChatGPT 全名Chat Generative Pre-trained Transformer (聊天生成性预训练转换模型) 说简单点,ChatGPT就是一个AI聊天机器人,背后是一…

Redis(08)| 线程模型

一、redis 的线程模型 redis 内部使用文件事件处理器 file event handler,它是单线程的,所以redis才叫做单线程模型。它采用IO多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事…

Vue3.3指北(四)

Vue3.3指北 1、WebPack - VueCLI1.1、WebPack安装VueCli1.2、vue create 创建项目1.3、项目目录结构介绍 2、ViteVue32.1、认识create-vue2.2、使用create-vue创建项目2.3、项目目录剖析2.4、ESlint代码规范及手动修复2.5、通过eslint插件来实现自动修正 3、VueRouter43.1、单页…

SpringCloud 微服务全栈体系(七)

第九章 Docker 一、什么是 Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致…

基于SpringBoot的个人博客系统

基于SpringBootVue的个人博客系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 系统公告 博客详情 后台发文 摘要 基于Spring Boot的个人博客系统是一种…

实用搜索小技巧——站在巨人的肩膀上看世界

文章目录 1. 关于搜索效率2. 谷歌搜索语法2.1 “” 限定关键词2.2 intitle 限定标题2.3 限定关键词限定标题2.4 allintitle 标题多个关键词2.5 intext 限定内容关键词2.6 inurl 限定网址关键词2.7 site 限定网址来源2.8 imagesize 限定图片尺寸2.9 filetype 限定文件格式 3. in…

8.自定义组件布局和详解Context上下文

pages/index.vue layout布局运行在服务端 1、在项目的目录下新建layout文件夹,并新建一个blog.vue布局文件 2、在页面中的layout函数里,返回刚才新建布局文件的名字blog就可以使用了 export default {...layout (context) {console.log(context)retu…

探索Vue 3和Vue 2的区别

目录 响应式系统 性能优化 Composition API TypeScript支持 总结 Vue.js是一款流行的JavaScript框架,用于构建用户界面。Vue 3是Vue.js的最新版本,相较于Vue 2引入了许多重大变化和改进。在本文中,我们将探索Vue 3和Vue 2之间的区别。 …

【中国知名企业高管团队】系列50:荣耀手机

今天为您介绍中国手机的一个“新势力”——荣耀。说是“新”是因为他单独运作的时间最短,说他“势力”是因为他的崛起自带光环,市场拓展和发展让OPPO、VIVO和小米都感到巨大的压力,可以说中国市场的大部分份额都被苹果、华为、OPPO、VIVO、小…

图解java.util.concurrent并发包源码系列——深入理解ConcurrentHashMap并发容器,看完薪水涨一千

图解java.util.concurrent并发包源码系列——深入理解ConcurrentHashMap并发容器 HashMap简单介绍HashMap在并发场景下的问题HashMap在并发场景下的替代方案ConcurrentHashMap如何在线程安全的前提下提升并发度1.71.8 JDK1.7的ConcurrentHashMap源码JDK1.8的ConcurrentHashMap源…

2016年上半年上午易错题(软件设计师考试)

以下媒体文件格式中,( 12 )是视频文件格式。 A . WAV B . BMP C . MP3 D.MOV 以下软件产品中,属于图像编辑处理工具的软件是( 13 )。 A . Po…

Flask 路由机制分析之一

一、前言 《Flask Run运行机制剖析》这篇我们讲了应用启动的内部机制,启动后就开始监听Http请求了,请求过来如何跳到对应的函数执行,这就是路由机制。我们沿用上一篇例子,来探究一下app.route("/")内部干了些什么事。 …

2017年上半年上午易错题(软件设计师考试)

CPU 执行算术运算或者逻辑运算时,常将源操作数和结果暂存在( )中。 A . 程序计数器 (PC) B. 累加器 (AC) C. 指令寄存器 (IR) D. 地址寄存器 (AR) 某系统由下图所示的冗余部件构成。若每个部件的千小时可靠度都为 R &…

HiQPdf Library for .NET - HTML to PDF Crack

HiQPdf Library for .NET - HTML 到 PDF 转换器 .NET Core,用于 .NET 的 HiQPdf HTML 到 PDF 转换器 :HiQPdf HTML to PDF Library for .NET C# 和 HTML to PDF .NET Core 为您提供了一个现代、快速、灵活且强大的工具,只需几行代码即可创建复…

Python 算法高级篇:堆排序的优化与应用

Python 算法高级篇:堆排序的优化与应用 引言 1. 什么是堆?2. 堆的性质3. 堆排序的基本原理4. 堆排序的 Python 实现5. 堆排序的性能和优化6. 堆排序的实际应用7. 总结 引言 堆排序是一种高效的排序算法,它基于数据结构中的堆这一概念。堆排序…