8.python文件

embedded/2025/2/22 17:15:12/

文章目录

大家好,我是晓星航。今天为大家带来的是 python文件 相关的讲解!😀

1.文件

1.1文件是什么

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

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

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

image-20241216000616214

通过文件的后缀名, 可以看到文件的类型. 常见的文件的类型如下:

1.2文件路径

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

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

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

例如, 上述截图中的 QQ.exe 这个文件, 描述这个文件的位置, 就可以使用路径

D:\program\qq\Bin\QQ.exe 来表示.

  • D: 表示 盘符. 不区分大小写.
  • 每一个 \ 表示一级目录. 当前 QQ.exe 就是放在 “D 盘下的 program 目录下的 qq 目录下的 Bin 目录中” .
  • 目录之间的分隔符, 可以使用 \ 也可以使用 / . 一般在编写代码的时候使用 / 更方便.

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

除了绝对路径之外, 还有一种常见的表示方式是 相对路径. 相对路径需要先指定一个基准目录, 然后以基准目录为参照点, 间接的找到目标文件. 咱们课堂上暂时不详细介绍.

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

1.3文件操作

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

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

1.3.1打开文件

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

python">f = open('d:/test.txt', 'r')
  • 第一个参数是一个字符串, 表示要打开的文件路径
  • 第二个参数是一个字符串, 表示打开方式. 其中 r 表示按照读方式打开. w 表示按照写方式打开. a表示追加写方式打开,r+表示以读写方式打开.
  • 如果打开文件成功, 返回一个文件对象. 后续的读写文件操作都是围绕这个文件对象展开.
  • 如果打开文件失败(比如路径指定的文件不存在), 就会抛出异常.

image-20241216000910816

1.3.2关闭文件

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

python">f.close()

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

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

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

image-20241216001040885

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

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

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

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

1.3.3文件

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

  • 文件, 要使用写方式打开, open 第二个参数设为 'w'如果文件不存在,会创建文件
  • 'w+'读写模式,打开文件进行读写操作。文件会被截断(清空),如果文件不存在,会创建文件
  • 使用 write 方法写入文件
python">f = open('d:/test.txt', 'w')
f.write('hello')
f.close()
image-20241216001149996

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

  • 如果是使用 'r' 方式打开文件, 则写入时会抛出异常
python">f = open('d:/test.txt', 'r')
f.write('hello')
f.close()

image-20241216001224891

  • 使用 'w' 一旦打开文件成功, 就会清空文件原有的数据.
  • 使用 'a' 实现 “追加写”, 此时原有内容不变, 写入的内容会存在于之前文件内容的末尾,如果文件不存在,会创建文件
  • 'a+':追加和读写模式,以追加和读写模式打开文件。如果文件存在,新内容将追加到文件末尾;如果文件不存在,会创建文件
python">f = open('d:/test.txt', 'w')
f.write('hello')
f.close()f = open('d:/test.txt', 'a')
f.write('world')
f.close()

image-20241216001255420

  • 针对已经关闭的文件对象进行写操作, 也会抛出异常.
python">f = open('d:/test.txt', 'w')
f.write('hello')
f.close()
f.write('world')

image-20241216001314178

1.3.4文件

  • 文件内容需要使用 'r' 的方式打开文件
  • 或使用'r+'读写的方式打开文件文件必须存在,否则会引发 FileNotFoundError 异常。
  • 使用 read 方法完成读操作. 参数表示 “读取几个字符”
python">f = open('d:/test.txt', 'r',encoding='utf-8')
result = f.read(2)
print(result)
f.close()
image-20241222230201176

注:这里的硬盘位置写D或者d都可以,后面的编码方式写utf8 utf-8 UTF8 UTF-8 都可以,我们的编译器都会默认识别为utf-8的编码方式

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

image-20241222230122808

先构造一个多行文件

python">f = open('D:/code.txt', 'r',encoding='utf-8')
for line in f:print(f'line = {line}')
f.close()
image-20241222225843595

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

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

python">f = open('D:/code.txt', 'r',encoding='utf-8')
for line in f:print(f'line = {line}',end='')
f.close()
image-20241222225931780
  • 使用 readlines 直接把文件整个内容读取出来, 返回一个列表. 每个元素即为一行.
python">f = open('D:/code.txt', 'r',encoding='utf-8')
line = f.readlines()
print(line)
f.close()
image-20241222230036543

此处的 \n 即为换行符.

1.4关于中文的处理

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

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

image-20241222230823286

也有的同学可能出现乱码.

image-20241216001754379

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

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

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

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

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

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

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

Python3 中默认打开文件的字符集跟随系统, 而 Windows 简体中文版的字符集采用了 GBK, 所以如果文件本身是 GBK 的编码, 直接就能正确处理.

如果文件本身是其他编码(比如 UTF-8), 那么直接打开就可能出现上述问题

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

image-20241216001903829

  • 如果此处的编码为 ANSI , 则表示 GBK 编码.
  • 如果此处为 UTF-8 , 则表示 UTF-8 编码.

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

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

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

1.5使用上下文管理器

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

  • 使用 with … as语句打开文件.
  • 当 with 内部的代码块执行完毕后, 就会自动调用关闭方法.
python">with open('D:/code.txt','r',encoding='utf-8')as f:result = f.readlines()print(result)

image-20241222232441029

with 语句作用:

  • 当使用 with 语句时,在代码块执行完毕后,文件对象会自动关闭。这是通过上下文管理器实现的,文件对象实现了上下文管理器协议。无需手动调用 f.close() 方法,避免了因忘记关闭文件而导致的资源泄漏问题。
  • 即使在代码块内部发生异常,with 语句也能确保文件被正确关闭。
python">try:with open('example.txt', 'r') as f:# 假设这里发生异常1 / 0content = f.read()print(content)
except ZeroDivisionError:print("An error occurred, but the file is still closed.")

在上述代码中,即使在读取文件内容之前发生了除以零的异常,文件对象 f 也会被自动关闭,因为 with 语句会在异常处理前确保文件关闭。

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘


http://www.ppmy.cn/embedded/164393.html

相关文章

Deepseek 与 ChatGPT:AI 浪潮中的双子星较量

引言 在人工智能飞速发展的当下,AI 语言模型成为了人们关注的焦点。Deepseek 与 ChatGPT 作为其中的佼佼者,各自展现出独特的魅力,引领着 AI 技术的发展潮流。今天,就让我们深入探讨这两款模型,看看它们在 AI 领域中是…

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中,可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本,结合 Typora 快速生成流程图和甘特图,并通过 Markdown 格式生成思维导图,最终…

题海拾贝:【枚举】P2010 [NOIP 2016 普及组] 回文日期

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

智信BI:解决Power BI全面兼容问题的新选择

随着企业数据量的持续增长&#xff0c;数据可视化的重要性日益凸显。智信BI作为一套现代化的数据可视化平台&#xff0c;专注于帮助企业应对复杂的数据分析挑战。该平台支持多种报表形式&#xff0c;包括Power BI报表、格式化报表及Office报表&#xff0c;满足不同用户的多样化…

分步教程:使用 i18next 本地化 React 网站

分步教程&#xff1a;使用 i18next 本地化 React 网站 通过本指南学习如何为 React 应用添加多语言支持&#xff0c;实现动态语言切换和翻译管理。 前置条件 基础的 React.js 知识已安装 Node.js 和 npm/yarn通过 create-react-app 创建的 React 项目 步骤 1&#xff1a;安装所…

阿里云通过docker安装skywalking及elasticsearch操作流程

系统 本文使用系统为 Alibaba Cloud Linux 3.2104 LTS 64位 配置为 4核8G PS&#xff1a;最低配置应为2核4G&#xff0c;配置过低无法启动 安装docker 1.卸载旧版本docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-…

【学习笔记】QT绘图和绘图设备

1. QPainter Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。 QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPain…

设计模式教程:解释器模式(Interpreter Pattern)

1. 什么是解释器模式&#xff1f; 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;通常用于处理语言&#xff08;例如数学表达式、SQL查询等&#xff09;中的语法和解释。该模式定义了一个文法&#xff0c;并通过解释器类来解释文法中…