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.hqwc.cn/news/295231.html

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

相关文章

内部FLASH模拟EPPROM

本例程基于STM32F103ZET6 FLASH大小为512K。 介绍FLASH 不同型号的 STM32&#xff0c;其 FLASH 容量也有所不同&#xff0c;最小的只有 16K 字节&#xff0c;最大的则达到了 1024K 字节。我们的精英 STM32 开发板选择的是 STM32F103ZET6 的 FLASH 容量为 512K 字节&#xff0…

Centos安装vsftpd:centos配置vsftpd,ftp报200和227错误

一、centos下载安装vsftpd&#xff08;root权限&#xff09; 1、下载安装 yum -y install vsftpd 2、vsftpd的配置文件 /etc/vsftpd.conf 3、备份原来的配置文件 sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup 4、修改配置文件如下&#xff1a;vi /etc/vsftpd.conf …

基于Java SSM框架实现实现班级同学录、聚会报名网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现班级同学录聚会报名网站系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人…

懂机器学习?先来回答这三个问题 >>

机器学习是一种数据分析技术&#xff0c;让计算机学习人类和动物与生俱来的能力&#xff1a;从经验中学习。 机器学习算法使用计算方法直接从数据中“学习”信息&#xff0c;而不依赖于预定方程作为模型。 随着可用于学习的样本数量的增加&#xff0c;算法也会相应地提高性能。…

html5实现最高端的公司年会抽奖(源码)

文章目录 1.设计来源1.1 主界面1.2 抽奖效果1.3 中奖效果 2.效果和源码配置2.1 动态效果2.2 员工信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/13517192…

C++加法运算符的重载(operator)

1.重载加法运算符 为什么要重载加法运算符&#xff1f; 因为C提供的加法运算符只能满足基本数据类型间的加法&#xff0c;如果我想让俩个相同的类的对象进行加法的话会报错 所以为了能让俩个相同类的对象进行加法&#xff0c;我们要把这个过程封装到一个函数里面&#xff0c;只…

解决 MATLAB 遗传算法中 exitflg=4 的问题

一、优化问题简介 以求解下述优化问题为例&#xff1a; P 1 : min ⁡ p ∑ k 1 K p k s . t . { ∑ k 1 K R k r e q l o g ( 1 α k ∗ p k ) ≤ B b s , ∀ k ∈ K p k ≥ 0 , ∀ k ∈ K \begin{align} {P_1:}&\mathop{\min}_{\bm{p}}{ \sum\limits_{k1}^K p_k } \no…

HTML+CSS做一个时尚柿子造型计时器

文章目录 💕效果展示💕代码展示HTMLJS💕效果展示 💕代码展示 HTML <!DOCTYPE html> <html lang

Featured Based知识蒸馏及代码(3): Focal and Global Knowledge (FGD)

文章目录 1. 摘要2. Focal and Global 蒸馏的原理2.1 常规的feature based蒸馏算法2.2 Focal Distillation2.3 Global Distillation2.4 total loss3. 实验论文: https://arxiv.org/pdf/2111.11837.pdf

Hive-high Avaliabl

hive—high Avaliable ​ hive的搭建方式有三种&#xff0c;分别是 ​ 1、Local/Embedded Metastore Database (Derby) ​ 2、Remote Metastore Database ​ 3、Remote Metastore Server ​ 一般情况下&#xff0c;我们在学习的时候直接使用hive –service metastore的方式…

管理 Jenkins 详细指南

目录 系统配置 安全 状态信息 故障 排除 工具和操作 系统配置 系统&#xff0c;配置全局设置和路径&#xff0c;端口更改&#xff0c;下载地址等。 工具&#xff0c;配置工具、其位置和自动安装程序。 插件&#xff0c;添加、删除、禁用或启用可以扩展 Jenkins 功能的插…

openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据

文章目录 openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据168.1 操作场景168.2 操作步骤168.3 示例 openGauss学习笔记-168 openGauss 数据库运维-备份与恢复-导入数据-使用gs_restore命令导入数据 168.1 操作场景 gs_restore是…