Python入门知识点分享——(八)文件的open方法

news2025/1/19 23:07:10

学完了Python当中的数据类型,下一步我们来了解如何用Python语言打开文件并添加内容。

目录

file

mode

buffering

encoding

errors

newline

closefd

opener

函数


打开文件需要用到open函数,完整的语法格式如下所示,为了演示方便,我在Python文件的目录中添加了“word_work.txt”文件,内容节选了马克思《青年在选择职业时的考虑》中的一段话。

fp = open("word_work.txt", mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
'''file: 文件路径,这里由于文件在同一目录下,使用了相对路径
mode: 文件打开模式,r代表只读模式
buffering: 设置缓冲,缓冲区是为了避免多次进行系统调用,减少时间浪费
encoding: 文件格式,一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。'''
print(fp.read())
# 用read函数查看文件内容
fp.close()
# 打开文件后要记得关闭,不然会占用内存资源
  If we have chosen the position in life in which
we can most of all work for mankind, no burdens
can bow us down, because they are sacrifices 
for the benefit of all; then we shall experience
no petty, limited, selfish joy, but our happiness
will belong to millions, our deeds will live on
quietly but perpetually at work, and over our
ashes will be shed the hot tears of noble people.

 下面对每一个参数进行讲解。 

file

可以使用绝对路径和相对路径,是用于指定文件或目录位置的两种方式。

绝对路径是一个完整的文件或目录的路径,从文件系统的根目录开始一直到目标文件或目录的路径,可以唯一确定一个文件或目录的位置。它通常以根目录(如Windows中的C:\)作为起始点,然后按照目录结构逐级指定,直到目标文件或目录。

相对路径是相对于当前工作目录或当前文件所在目录的路径。它不是一个完整的路径,而是通过参照当前位置与目标位置之间的相对关系来确定目标文件或目录的位置。相对路径可以使用特定的符号表示不同的位置关系,如“.”表示当前目录,“..”表示上级目录,可以使用这些符号构建目标文件或目录的位置。

mode

t文本模式 (默认)。
x新建文件
b二进制模式
+打开文件进行更新,可用来读取也可写入
r以只读方式打开文件
w打开文件用于写入。如果文件已存在,则删除原有内容,并从开头开始编辑;如果不存在,新建文件。
a打开文件用于补充。如果文件已存在,会写在已有内容之后;如果不存在,新建文件。

这几种模式还可以叠加,比如rb就是二进制只读模式,wb是二进制写入。还要注意修改后要使用close函数关闭文件再读取。

fp = open("word_work.txt", mode='w+')
fp.write("Karl Heinrich Marx")
fp.close()
fp = open("word_work.txt", mode='r')
print(fp.read())
fp.close()
fp = open("word_work.txt", mode='rb')
print(fp.read())
fp.close()
Karl Heinrich Marx
b'Karl Heinrich Marx'

而二进制格式主要用图片的存取。

输出的结果太长了,这里只给大家展示一部分。

src_file=open('Marx.jpg', 'rb')
# 以二进制格式使用只读模式
print(src_file.read())
src_file.close()
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xdb\x00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\x0c\x19\x12\x13\x0f\x14\x1d\x1a\x1f\x1e\x1d\x1a\x1c\x1c $.\' ",#\x1c\x1c(7),01444\x1f\'9=82<.342\xff\xdb\x00C\x01\t\t\t\x0c\x0b\x0c\x18\r\r\x182!\x1c!22

我们还可以用flush函数立刻将缓冲区的数据写入文件中。 

fp = open("word_work.txt", mode='w+')
fp.write("Karl\rHeinrich\rMarx")
fp.flush()
fp = open("word_work.txt", mode='r')
print(fp.read())
fp.close()

Karl
Heinrich
Marx

buffering

buffering用于指定缓冲策略,表示使用特定大小的缓冲区,其中buffering的值表示缓冲区的大小,以字节为单位。数据会先存储在缓冲区中,然后在满足一定条件时(例如缓冲区满了或手动调用了flush方法)才会写入文件或读取文件。它有三种可能的取值:

1. buffering=None:默认情况下,不进行缓冲,数据会立即被写入文件或从文件读取。

2. buffering=0:表示关闭缓冲,数据会立即被写入文件或从文件读取。

3.buffering=1:即行缓冲,碰到一个换行符就进行一次系统调用

4. buffering>1:指定较大的缓冲区大小可以提高I/O性能,特别是在处理大量数据时。需要注意数据并不是立即写入文件或读取文件的,可能会导致文件的内容在写入之前不完整,或者读取的内容不及时。

具体用法可以参考http://t.csdnimg.cn/YZitF

encoding

常用的编码方式包括UTF-8、GBK、ASCII等。不同的编码方式有不同的字符集范围和存储方式,假如我们用UTF-8编写了文本而用GBK格式打开的话就有可能出现乱码。

errors

errors参数用于指定在读取或写入文件时遇到编码错误时的处理方式,以下几种是常见的errors参数取值:

- 'strict':默认值,表示遇到编码错误时抛出UnicodeError异常。
- 'ignore':忽略遇到的编码错误,直接跳过错误的字符。
- 'replace':使用特殊的占位符(通常是"?")代替无法解码的字符。
- 'xmlcharrefreplace':使用XML字符引用(如"&#xXXXX;")代替无法解码的字符。
- 'backslashreplace':使用反斜杠转义代替无法解码的字符。
- 'surrogateescape':将无法解码的字符替换为Unicode转义序列,使得它们可以在字符串中保留,并在后续处理中恢复。

对于后面这几类参数,我们只需要了解它们的原理,在实际使用中等于None就可以了。 

newline

newline参数用于控制文本文件的换行符的处理方式,它有五种取值:

  • None:默认值,表示不会对换行符进行任何处理。
  • '':将\r\n视为换行符,且在读取或写入时统一使用\n作为换行符。
  • '\n':将\r\n视为换行符,且在读取或写入时统一使用\n作为换行符。
  • '\r':将\n视为换行符,且在读取或写入时统一使用\r作为换行符。
  • '\r\n':将\r\n视为换行符,且在读取或写入时统一使用\r\n作为换行符。
fp = open("word_work.txt", mode='w+', newline='')
fp.write("Karl\nHeinrich\nMarx")
fp.close()
fp = open("word_work.txt", mode='r', encoding="UTF-8")
print(fp.read())
fp.close()
Karl
Heinrich
Marx

closefd

closefd参数用于指定是否在文件关闭时同时关闭底层的文件描述符。文件描述符是操作系统中用于跟踪和管理打开文件的一种机制,在Python中,当我们使用open函数打开一个文件时,它会返回一个文件对象并分配一个文件描述符来跟踪该文件。

该参数默认值为True表示在文件关闭时同时关闭底层的文件描述符,这样可以确保释放系统资源并避免文件描述符的泄漏。

如果要将参数设置为False,则在文件关闭时不会关闭底层的文件描述符。这可以在以下情况下使用:

  • 当文件描述符被其他部分的代码引用或使用时,可能不希望在open()函数关闭文件时关闭该文件描述符。
  • 当需要在文件关闭后继续对文件描述符进行操作时,可以将closefd参数设置为False,使得文件关闭后仍然可以对文件描述符进行操作。

opener

opener参数用于指定一个自定义的打开器来替代内置的打开器。打开器是一个函数,其作用是根据给定的文件名和模式来打开文件,并返回一个文件对象。不过该参数仅在Unix-like系统上受支持,而在Windows系统上没有实际作用。在Windows系统上,使用opener参数打开文件时,会将其忽略并直接使用内置的打开器。

函数

这里补充了一些和文件读写有关的函数:

tell函数返回文件的当前位置,即文件指针当前位置,实际上就是write函数写入内容的长度。

fp = open("word_work.txt", mode='w+')
fp.write("socialism")
print(fp.tell())
fp.close()
9

readline函数用于从文件读取整行。

fp = open("word_work.txt", mode='r')
print(fp.readline())
fp.close()
  If we have chosen the position in life in which

 以上就是open方法的全部内容了,谢谢大家。

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

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

相关文章

量化服务器 - 后台挂载运行

服务器 - 后台运行 pip3命令被kill 在正常的pip命令后面加上 -no-cache-dir tmux 使用教程 https://codeleading.com/article/40954761108/ 如果你希望在 tmux 中后台执行一个 Python 脚本&#xff0c;你可以按照以下步骤操作&#xff1a; 启动 tmux: tmux这将会创建一个新…

全方位掌握卷积神经网络:理解原理 优化实践应用

计算机视觉CV的发展 检测任务 分类与检索 超分辨率重构 医学任务 无人驾驶 整体网络架构 卷积层和激活函数&#xff08;ReLU&#xff09;的组合是网络的核心组成部分 激活函数(ReLU&#xff09; 引入非线性&#xff0c;增强网络的表达能力。 卷积层 负责特征提取 池化层…

CSM4054 500mA线性锂离子电池充电管理 适用消费类的电子产品

CSM4054 是一款完整的单节鲤离子电池采用恒定电流/恒定电压线性充电器。其 SOT23-5 封装与较少的外部元件数量使得 CSM4054 成为便携式应用的理想选择。 CSM4054 可以适合 USB 电源和适配器电源工作。由于采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff0…

Rust报错:the msvc targets depend on the msvc linker but `link.exe` was not found

当我在我的 windows 电脑上安装 rust&#xff0c;然后用 cargo 新建了一个项目后&#xff0c;cargo run 会报错&#xff1a; error: linker link.exe not found| note: program not foundnote: the msvc targets depend on the msvc linker but link.exe was not foundnote: p…

如何实现酷狗音乐pc页面点击播放时,打开多个歌曲播放时,始终在一个播放页面,(标签页的通讯)

大致有两种思路&#xff0c; 一种是通过wind.open()方法传第二个参数&#xff0c; A页面&#xff1a; //点击跳转播放页函数function toPlayPage(){window.open(path/xxxx/xxxx?name音乐名,music)//第二个参数写一个定值&#xff0c;代表跳转页面都为music标签页&#xff0…

小程序本地文件读、写、追加数据操作,以及修改文件内容

小程序系统文件管理器 FileSystemManager 要操作/读取本地文件,首先需要创建文件或文件夹,然后再对文件进行读写操作; 首先创建文件 FileSystemManager.writeFile 可直接创建文件并写入内容 定义文件路径,此路径在读写操作时保持一致 const path = `${wx.env.USER_DATA…

基于电商场景的高并发RocketMQ实战-NameServer内核原理剖析、Broker 主从架构与集群模式原理分析

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

分而治之:Fork/Join框架(构造一个1到200 000求和的任务)

Fork一词的原始含义是吃饭用的叉子&#xff0c;也有分叉的意思。在linux平台中&#xff0c; 方法fork用来创建子进程。使得系统进程可以多一个执行分组。 而join方法这里表示等待&#xff0c;也就是使用fork方法后系统多了一个执行分支(线程) 所以需要等待这个执行分支执行完毕…

【NI-RIO入门】使用其他文本语言开发CompactRIO

1.FPGA 接口Python API Getting Started — FPGA Interface Python API 19.0.0 documentation 2.FPGA接口C API FPGA 接口 C API 是用于 NI 可重配置 I/O (RIO) 硬件&#xff08;例如 NI CompactRIO、NI Single-Board RIO、NI 以太网 RIO、NI FlexRIO、NI R 系列多功能 RIO 和…

技术分享 | 接口测试请求超时怎么办?

​ &#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试…

机场数据治理系列介绍(2):六图法开展数据治理的步骤与要点

目录 一、机场数据治理的六图法 1、何为六图法 二、应用数据治理六图法的相关工作步骤 1、制定战略目标 2、梳理业务情况 3、收集需求 4、构建数智应用地图 5、选择合适的算法 6、建立数据地图 7、持续改进和优化 三、相关要点 1、明确数据治理三张清单 2、持续构…

JWT是什么?它有什么用?

1. 什么是 JWT&#xff1f; JWT是 JSON Web Token 的缩写&#xff0c;通过数字签名的方式&#xff0c;以 JSON 对象为载体&#xff0c;在不同的服务器终端之间安全传输的信息。 2. JWT 有什么用&#xff1f; JWT 最常见的场景就是授权认证&#xff0c;一旦用户登录&#xff…

异方差 的 BP检验 方法及原理详解

异方差 的 BP检验详解            文章目录 1. `BP`检验的步骤2. 场景示例步骤 ①步骤 ②BP检验,也称为Breusch-Pagan检验,是一种用于检验线性回归模型中异方差性(即误差项方差不恒定)的统计方法。该方法由Trevor S. Breusch和Adrian R. Pagan在1980年提出。 1.…

亚马逊圣诞关键词怎么选?亚马逊圣诞节促销活动有哪些?——站斧浏览器

亚马逊圣诞关键词怎么选&#xff1f; 以下是在亚马逊圣诞期间利用长尾关键词的一些建议&#xff1a; 圣诞主题关键词&#xff1a;随着节日的临近&#xff0c;与圣诞相关的关键词搜索热度将急剧上升。在产品标题、描述、关键词等位置使用与圣诞节相关的关键词&#xff0c;比如…

ArcTS循环ForEach

//定义类 class Item{image:ResourceStrconstructor(image:ResourceStr){this.imageimage} } Entry Component struct Index {//声明变量private items:Array<Item>[new Item($r(app.media.my_icon)),new Item($r(app.media.my_icon)),new Item($r(app.media.my_icon)),n…

人大金仓Kingbase数据库备份和还原

前言 最近在项目开发过程中&#xff0c;使用了国产数据库人大金仓&#xff08;即Kingbase数据库&#xff09;&#xff0c;在使用过过程中需要对数据库进行备份与还原&#xff0c;在此对相关的命令进行简单介绍&#xff0c;以备不时之需。 Linux环境下安装人大金仓可参考此篇文…

k8s部署elastic+kibana

1.软件版本说明 1.1软件版本说明 软件版本kubernetes1.23.17elasticsearch7.17.3kibana7.17.3 1.2硬件环境说明 宿主机使用windows10安装vmware17.5.0&#xff0c;虚拟机安装linux系统&#xff08;centos7.9&#xff09; 说明&#xff1a; elasticserch和kibana的版本尽量…

邦火策划的餐饮品牌策划,到底是不是打破常规的创新之选?

在餐饮业的浩瀚市场中&#xff0c;邦火策划以其独特的餐饮品牌策划服务&#xff0c;引起了业界的关注。邦火策划是否真的是打破常规的创新之选&#xff1f;让我们深入了解&#xff0c;探寻其中的奥秘。 首先&#xff0c;邦火策划在餐饮品牌策划中的创新之处在于对市场的深度洞…

【IDEA】try-catch自动生成中修改catch的内容

编辑器 --> 文件和代码模板 --> 代码 --> Catch Statement Body

又老性能又差,为什么好多公司依然选择 RabbitMQ?

大家好&#xff0c;我是君哥。 RabbitMQ 这个消息队列相信很多程序员都用过&#xff0c;我第一次使用是在 2016 年&#xff0c;确实是一个老牌的消息队列了&#xff0c;但是为什么一直没有被淘汰呢&#xff1f;今天来聊一聊这个话题。 老旧差 发布历史 为什么说 RabbitMQ 老…