目录

2.1、文件打开模式

2.1.1、只读模式打开文件——只读(r)

2.1.2、读写模式打开文件——读写模式(r+)

2.1.3、写模式打开文件——写模式(w)

2.1.4、读写模式打开文件——读写模式(w+)

2.1.5、写模式打开文件(追加内容)——写模式(a)

2.1.6、读写模式打开文件(追加内容)——读写模式(a)

2.2、二进制模式打开文件


关于文件打开模式可以参考下表:(表格来源于:菜鸟教程)

模式 描述
t 文本模式 (默认)。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
+ 打开一个文件进行更新(可读可写)。
U 通用换行模式(不推荐)。
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

文件打开模式有很多,但是我们实际用到的就只有六种。

我们总结一下主要用到的是下面六种。

模式 可做操作 若文件不存在 是否覆盖文件原来内容
r 只读 报错 ——
r+ 可读、可写 报错
w 只写 创建
w+  可读、可写 创建
 
a   只写 创建 否,追加写
a+ 可读、可写 创建 否,追加写

下面我们用例子来看,怎么写。(下面所有的例子,为了方便查看,我把文件创建在和Python程序所在的文件夹里面,这样可以直接写文件名称)


2.1、文件打开模式

2.1.1、只读模式打开文件——只读(r)

文件存在的场合:

这里我尝试文件中写 hello world。报错意思没有写权限。

文件不存在的场合:

很明显,出现了文件不存在的错误。

2.1.2、读写模式打开文件——读写模式(r+)

文件存在的场合,zxc.txt文件的内容:

下面我们用读写模式打开文件,并向里面写入hello world。

这时候文件内容,注意看:光标在h前面。原来的内容被删除。

文件不存在的场合:

很明显,出现了文件不存在的错误。

2.1.3、写模式打开文件——写模式(w)

文件存在的场合,zxc.txt的文件内容:

下面我们用写模式打开文件,并向里面写入Python。

文件的内容如下,仔细看:输入的光标位置在最开始。P前面有个光标。

很明显,删除原来的文件内容,重新写入Python,并且把光标放在文件最开始。

文件不存在的场合:

可以看到我的文件夹里面没有zxc.txt。

下面我们用写模式打开文件,并向里面写入Python。

这时候我的文件夹:

可以看到,自己创建了zxc.txt文件。

文件内容如下,仔细看:输入的光标位置在最开始。P前面有个光标。

很明显,自己创建了文件,写入Python,并且把光标放在文件最开始。

既然w是写模式,我们试着读取文件内容看看。这时候的文件内容是Python。

很明显,出现文件不能读的错误。

2.1.4、读写模式打开文件——读写模式(w+)

文件存在的场合,文件内容:

既然是读写模式(w+),所以我们先读文件内容,再写入Python,然后再读取文件内容。

可以看到我们打印文件内容的时候没有报错,但是没有打印出任何内容?

那我们写入成功了吗?

很明显写入成功了,但是为什么没有打印出来内容?

其实是由于读写机制的问题,当一个文件被读或者写一次后,文件中文件指针指向的是整个文件的末尾,再次读时从末尾开始读的话肯定是什么都到。

文件不存在的场合:可以看到我的文件夹里面没有zxc.txt。

这时候我们验证读写模式(w+)。

可以看到创建了文件zxc.txt。

 文件内容:


其实文件写模式(w)、读写模式(w+)还可以用作删除文件内容。

因为他们整个工作原理就是把文件原来的内容删除,然后写入新的内容。

如果我们写入的内容为空,那么不就是删除文件内容。

就如同下面这个例子。

文件内容:

可以看到,文件zxc.txt里面有无数个Python。

下面我们利用读写模式,但是不写入任何内容。

这时候我们查看文件内容:

文件内容是空,原来的内容删掉了。

同理,写模式(w)是一样的。


2.1.5、写模式打开文件(追加内容)——写模式(a)

文件存在的场合,文件内容如下:

下面我们写入内容 hello world

文件内容:

可以看到,Python后面追加了hello world。

文件不存在的场合,可以看到,我的文件夹里没有文件zxc.txt:

下面我们连续写入内容 hello world 和 Python。

可以看到zxc.txt被创建

文件内容:

既然是写模式,我们验证一下zxc.txt不能读。

出现错误不能读。

2.1.6、读写模式打开文件(追加内容)——读写模式(a+)

文件存在的场合,文件内容如下:

下面我们写入内容 hello world

文件内容:

可以看到,Python后面追加了hello world。

文件不存在的场合,可以看到,我的文件夹里没有文件zxc.txt:

下面我们连续写入内容 hello world 和 Python。

可以看到zxc.txt被创建

文件内容:

既然是读写模式,我们验证一下zxc.txt可读。

没有出现错误,但是没有打印出内容。

原因其实是由于读写机制的问题,当一个文件被读或者写一次后,文件中文件指针指向的是整个文件的末尾,再次读时从末尾开始读的话肯定是什么都到。


所有模式我们都进行了说明,我们再看一下回顾一下我们整理的文件打开模式表:

模式 可做操作 若文件不存在 是否覆盖文件原来内容
r 只读 报错 ——
r+ 可读、可写 报错
w 只写 创建
w+  可读、可写 创建
 
a   只写 创建 否,追加写
a+ 可读、可写 创建 否,追加写

对于第三个参数buffering。

buffering的可取值有0,1, >1三个

  • 0代表buffer关闭(只适用于二进制模式,也就是我们文件打开模式中带b的,例如rb【二进制只读模式】)
  • 1代表line buffer(只适用于文本模式,也就是我们文件打开模式中的t)
  • >1表示初始化的buffer大小

这个参数我没用到过,所以这里我无法进行举例解释了,所以如果需要,还请自行查询。

2.2、二进制模式打开文件

我们看到了在文件打开模式中有以下模式:rb、wb……有这种带 b 的。

什么意思呢?

就是用二进制的方式打开文件。

有什么用?

我们来验证一下:
创建文件zxc.txt,内容如下:

下面读取文件:

很明显,我们出现了以下错误:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x82 in position 0: incomplete multibyte sequence

主要原因是因为编码的问题,可能是因为0x82这个字节在gbk编码中没有这个字符,可能原字符是两个字节,在gbk里被解析成了一个字节,导致字符不存在。

解决方法有两个:一个是二进制读取,一个是改编编码方式。

二进制读取就是利用rb、wb……

这就是我们文件打开方式有二进制的原因。

下面我们进行验证。

可以看到,二进制就把文件内容读出来了。并且看到原来是中文的句号在gbk里面没有。

前面的r、w、r+……就是上面讲的读模式、写模式、读写模式等等。配合二进制方式,就可以读取文件了。

Python——文件打开模式相关推荐

  1. 关于python字符编码以下选项中错误的是_关于Python文件打开模式的描述,以下选项中错误的是...

    [单选题]下列Python保留字中,不用于表示分支结构的是 [单选题]下列哪项不是python中文件的读取操作 [单选题]以下程序的输出结果是: s='' ls = [1,2,3,4] for l i ...

  2. 关于python文件打开模式的描述_【单选题】关于Python文件打开模式的描述,以下选项中描述错误的是 A. 覆盖写模式w B. 追加写模式a C. 创建写模式n D. 只读模式r...

    [单选题]关于Python文件打开模式的描述,以下选项中描述错误的是 A. 覆盖写模式w B. 追加写模式a C. 创建写模式n D. 只读模式r 更多相关问题 [单选,A2型题,A1/A2型题] 上 ...

  3. python文件打开模式组合_python文件处理

    一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声:燕池 萧: ...

  4. python文件打开模式rb表示只读模式打开文件_一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)...

    关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.各模式逐个分解 'r':只读. ...

  5. python文件打开模式的合法组合,python文件操作

    #内存中使用的编码是unicode,用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快) 字符编码 #硬盘中或者网络传输用utf-8,网络I/O延迟或磁盘I/O延迟要远大与utf ...

  6. 以下选项中、不是python对文件的打开模式的是_关于Python文件打开模式的描述,以下选项中错误的是()。...

    摘要: 户的该账余额期末,关于额为账款账户借方应收元的期初余,额80元本期贷方发生.打开的描模式... 户的该账余额期末,关于额为账款账户借方应收元的期初余,额80元本期贷方发生. 文件误 打开的描结 ...

  7. python文件打开模式中、使用w模式、文件指针指向_被python文件模式“w+”所迷惑

    慕仰8121524 假设您正在用with像你应该说的那样.然后你会做这样的事情来阅读你的文件:with open('somefile.txt', 'w+') as f: # Note that f h ...

  8. python中打开文件时只允许写入的模式是_详解python中各种文件打开模式

    在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...

  9. python中文件打开的合法模式组合_详解python中各种文件打开模式

    在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...

最新文章

  1. docker 安装 oracle12,使用Docker安装Oracle 12c
  2. php 验证座机,验证国内手机号与座机号的正则表达式
  3. view 注册服务器,view服务器ip地址
  4. 基于LZ77算法的文件解压缩项目缺陷分析
  5. 【MySQL查询】复杂查询:别名、外键join
  6. flex java 开发环境搭建_Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)
  7. 合约 cd 模式_CD的完整形式是什么?
  8. Codevs 1794 修剪花卉
  9. SQL Server T—SQL 基本编程
  10. 刚开始学习.NET 怎么样能使自己学习的更快点啊?
  11. springcloud 微服务鉴权_推荐 1w+ 星标的 SpringCloud 微服务项目,开发脚手架
  12. MATLAB之GUI界面介绍与搭建
  13. Axure RP9 一启动就崩溃弹出错误报告
  14. 华为云AI随笔(2)
  15. 三十不惑:情商智商决定我能走多快,德商(基本素质)决定我能走多远
  16. Merkle Tree、Merkle Proof、SPV安全性分析、Bloom过滤器
  17. Shiro自定义Ream
  18. v-on:click获取当前事件对象元素
  19. 小米12X、小米12、小米12 Pro参数对比
  20. jQuery动画实现、each迭代器、自定义动画、json简介

热门文章

  1. 微信小程序布局技巧(三)
  2. Android13 适配指南
  3. 岂止是盯上美联储 黑客正与全球央行对决
  4. 华医网《新型冠状病毒感染的肺炎防治知识培训》答案整理(2020年2月)
  5. Nmap扫描器主机、端口、版本、OS、漏洞扫描基本用法
  6. 打标签制作自己的数据集并在TensorFlow框架上训练
  7. java字符串与数字拼接_Java数字和字符串拼接原理及案例
  8. 2020全网最全的软件测试linux面试题及参考答案,赶紧收藏!
  9. Java实现地下城游戏(动态规划)
  10. 【VUE项目实战】56、商品添加功能(六)-提交添加的商品