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

学完了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.mzph.cn/news/240708.shtml

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

相关文章

【Linux系统基础】(1)Linux基础命令全面详解

在计算机世界中&#xff0c;Linux操作系统以其稳定性、安全性和开源性而受到广大程序员和系统管理员的喜爱。然而&#xff0c;对于初学者来说&#xff0c;Linux的命令行界面可能会显得有些复杂和难以理解。本文将详细介绍一些常用的Linux基础命令&#xff0c;帮助你更好地理解和…

TLC2543(12位A/D转换器)实现将输入的模拟电压显示到数码管上

代码&#xff1a; #include <reg51.h> #define uchar unsigned char #define uint unsigned int// 数码管0-9 unsigned char seg[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; sbit SDO P1^0; sbit SDI P1^1; sbit CS P1^2; sbit CLK P1^3; s…

【C语言】打印内存数据

C语言&#xff0c;用函数封装&#xff1a;16进制打印unsigned char *p指向的内存&#xff0c;长度为int l。16个字节&#xff0c;换一次行。16个字节用一个字符串缓存&#xff0c;一次打印。 以下是一个使用函数封装的C语言代码&#xff0c;用于以16进制格式打印unsigned char …

MyBatis——MyBatis的延迟加载

MyBatis的延迟加载&#xff08;一对多查询案例&#xff09; 1.什么是延迟加载&#xff1f; 开启延迟加载后&#xff0c;在真正使用数据的时候才发起级联查询&#xff0c;不用的时候不查询。 2.pojo User类&#xff1a; package com.wt.pojo;import java.io.Serializable; …

计算机毕业设计------JSP教务处学生成绩管理系统

项目介绍 本项目包含管理员、教师、学生三种角色&#xff1b; 用户角色包含以下功能&#xff1a; 修改密码,查看自己的信息,查看自己的成绩,登录界面等功能。 管理员角色包含以下功能&#xff1a; 修改示例,增删改查学生信息,增删改查教师信息,增删改查课程信息,管理员修改…

电机控制 相关基础概念

基本概念: 定子或者转子上有铁心或者绕铜线的地方,绕铜线的地方叫槽,而将槽分开的叫齿,将所有的齿连起来的部位较轭部。 磁感应强度与磁场强度之间的关系可以通过以下公式表示: B=μH 其中,B 是磁感应强度,H 是磁场强度,μ 是磁导率。这个关系表明,在给定磁场强度下…

Golang 通用代码生成器仙童发布 2.4.0 电音仙女尝鲜版一及其介绍两个模式的视频

Golang 通用代码生成器仙童发布 2.4.0 电音仙女尝鲜版一及其介绍两个模式的视频 Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版一及其介绍视频。视频请见&#xff1a; 正常模式&#xff1a; https://www.bilibili.com/video/BV1fw411V77i/ 哑数据模式&#xff1a;…

@z-utils组 重构和自动化实现

highlight: monokai theme: github 包简介 z-utils组 是一个可以在vue/react/pure js 中使用的工具包&#xff0c;它包含三个子类&#xff0c;分别为 z-utils/base, z-utils/react, z-utils/vue 三个分别在不同区域使用。 他是原 zzy-javascript-devtools 的重构版本&#xf…

嵌入式系统复习--Thumb指令集

文章目录 上一篇Thumb指令集概述Thumb指令详细介绍数据处理指令数据存储指令转移指令异常中断指令 下一篇 上一篇 嵌入式系统复习–ARM指令集(二) Thumb指令集概述 在编写Thumb指令时&#xff0c;先要用伪指令CODE16声明&#xff08;ADS的编译环境下&#xff09;&#xff0c…

程序设计的思想

程序设计思想是指在程序设计过程中所采用的一种思维方式&#xff0c;它是程序设计的灵魂和基础。程序设计思想的正确与否直接关系到程序的质量和可维护性。在实际的程序设计中&#xff0c;我们需要遵循一定的程序设计思想&#xff0c;以确保程序的正确性、可读性和可维护性。 …

序列化和反序列化对比分析,序列化和反序列化输出十个学生信息截图

序列化和反序列化是数据处理中的两个相对的概念&#xff0c;通常用于对象的存储和传输。下面是对这两个过程的对比分析&#xff1a; 序列化&#xff08;Serialization&#xff09; 定义 目的&#xff1a; 将对象的状态信息转换成可以存储或传输的形式&#xff08;如XML, JSO…

循环渲染ForEach

目录 1、接口说明 2、键值生成规则 3、组件创建规则 3.1、首次渲染 3.2、非首次渲染 4、使用场景 4.1、数据源不变 4.2、数据源组项发生变化 4.3、数据源数组项子属性变化 5、反例 5.1、渲染结果非预期 5.2、渲染性能降低 Android开发中我们有ListView组件、GridVi…

linux:IP地址、修改主机名、域名解析、虚拟机配置固定IP

一:IP地址 1、每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 2、IP地址主要有2个版本,V4版本和V6版本(V6很少用暂不涉及) 3、IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址 4、可以通过命令:ifconfi…

视频监控技术经历了哪些发展阶段?视频监控技术未来趋势展望

随着城市经济的发展和进步&#xff0c;视频监控也已经应用在人们衣食住行的方方面面&#xff0c;成为社会主体的一个重要组成部分。随着视频监控的重要性越来越凸显&#xff0c;大家对视频监控技术的发展也非常关注。今天我们来简单阐述一下&#xff0c;视频监控技术经历的几个…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)ChannelMap 模块的实现

&#xff08;三&#xff09;ChannelMap 模块的实现 这个模块其实就是为Channel来服务的&#xff0c;前面讲了Channel这个结构体里边它封装了文件描述符。假如说我们得到了某一个文件描述符&#xff0c;需要基于这个文件描述符进行它对应的事件处理&#xff0c;那怎么办呢&…

windos/ubuntu20.4下UE4.27.2像素流送

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行&#xff0c;用户可以通过浏览器操作虚幻引擎应用程序&#xff0c;客户端无需下载虚幻引擎&#xff0c;本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

企业出海-如何保护客户账户安全?

近年来国内企业竞争日益激烈&#xff0c;许多企业在这般环境下难以持续发展。那么该如何获得业务的可持续性增长&#xff0c;如何获取更多的客户的同时开阔公司的视野&#xff1f;出海便是如今帮助国内企业能快速发展壮大的潮流之一&#xff0c;摆脱了局限于国内发展的束缚奔向…

单调栈分类、封装和总结

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 通过枚举最小&#xff08;最大&#xff09;值不重复、不遗漏枚举所有子数组 C算法&#xff1a;美丽塔O(n)解法单调栈左右寻找第一个小于maxHeight[i]的left,right&#xff0c;[left,right]直接的高度都是maxHeight[i] 可以…

第十二章 异常-Exception

一、异常的概念&#xff08;P444&#xff09; Java 语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可分为两大类 &#xff08;1&#xff09;Error&#xff08;错误…

OpenCV-Python(19):Canny边缘检测

目录 学习目标 Canny 边缘检测原理 1.噪声抑制(噪声去除) 2.梯度计算 3.非极大值抑制 4.双阈值检测(滞后阈值) 5.边缘连接 Canny 边缘检测步骤 Canny 边缘检测的OpenCV实现 不同阈值的边缘检测效果 学习目标 了解Canny边缘检测的概念学习掌握函数cv2.Canny()的用法 …