Python可以使用open函数来实现文件的打开,关闭,读写操作;

Python3中的open函数定义为:

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

其中mode列表为:

'r'       #open for reading (default)
'w' #open for writing, truncating the file first
'x' #create a new file and open it for writing,python3新增
'a' #open for writing, appending to the end of the file if it exists
'b' #binary mode
't' #text mode (default),python3新增
'+' #open a disk file for updating (reading and writing)
'U' #universal newline mode (deprecated)

这里我们主要关心一下'r', 'w', 'a', 'r+', 'w+', 'a+', 'x',很多人容易混淆不同模式的读写操作

1)'r'

只读模式,open函数中mode参数的默认模式,文件不存在的话,报FileNotFoundError(python2是IOError);

文件打开后,初始游标位置为0;

每次读都是从游标位置开始读;

如果进行了写操作,会报如下异常:

io.UnsupportedOperation: not writable

2)'w'

只写模式,文件不存在的话,创建文件;文件存在的话,首先清空文件,然后开始写;

文件打开后,初始游标位置为0;

每次写都是从游标位置开始写;

如果进行了读操作,首先文件也会被清空,会报如下异常:

io.UnsupportedOperation: not readable

3)‘a’

追加模式,文件不存在话,创建文件;文件存在的话,不会清空文件;

文件打开后,初始游标位置为文件结尾;

每次写都是从结尾开始写;

如果进行了读操作,同时报如下异常:

io.UnsupportedOperation: not readable

上面的比较好理解,下面就有点绕了

4)'r+'

读写模式,文件不存在的话,报FileNotFoundError(python2是IOError);

文件打开后,初始游标位置为0;

每次读写都是从游标位置开始;但是对于写操作,类似于替换操作;

看如下代码:

文件内容为:

abcdefg

代码内容为:

f = open('open_mode.txt', 'r+')
f.write('xyz')
f.close()

运行代码后,文件内容变为:

xyzdefg

5)'w+'

只写模式,文件不存在的话,创建文件;文件存在的话,首先清空文件;

文件打开后,初始游标位置为0;

每次读写都是从游标位置开始;写操作,类似于替换操作;

6)‘a+’

追加模式,文件不存在话,创建文件;文件存在的话,不会清空文件;

文件打开后,初始游标位置为文件结尾;

每次写都是从结尾开始写;

读操作从游标位置开始;

7) 'x'

python3新加

创建文件并写操作,操作必须是不存在的文件,如果操作的文件已存在,则报错FileExistsError

不可读,如果进行了读操作,同时报如下异常:

io.UnsupportedOperation: not readable

最后画一张表格总结一下:

8)'b'

二进制形式读写文件;

写数据时,写入的数据类型必须为字符串类型,其他类型必须通过json(就是符合json格式的字符串)写入

python2与python3对于'b’ mode的行为不同,这和python2与python3的字符串类型有关;事实上,python的字符串类型有两种;

Python2的两种字符串类型,分别叫做str和Unicode,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。

Python2的两种字符串类型,分别叫做byte和str,与python2不同的是,byte实例包含原始的8位值;而str的实例,则包含Unicode字符。

当读写文件采用'b'的模式时,要求必须以二进制形式读写,在python2中,字符串必须为str字符串,python3中必须为byte字符串;所以在python3,'b'模式下这样读写字符串

s = b'hello world!'    #注意是byte字符串
f = open('open_mode.txt','wb')
f.write(s)

或:

s = 'hello world!'
f = open('open_mode.txt','wb')
f.write(s.encode(encoding='utf-8'))

不然会报如下错误:

Traceback (most recent call last):
File "C:/Users/Desktop/Python/cnblogs/数据类型.py", line 125, in <module>
f.write(s)
TypeError: a bytes-like object is required, not 'str'

open的内容还有很多,针对于读,还有个更好的模块linecache用于读取大文件;以后有时间继续扩展

open文件操作之mode模式剖析的更多相关文章

  1. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  2. python 文件操作: 文件操作的函数, 模式及常用操作.

    1.文件操作的函数: open("文件名(路径)", mode = '模式', encoding = "字符集") 2.模式: r , w , a , r+ , ...

  3. C中文件操作的文本模式和二进制模式,到底有啥区别?

    在C中,使用fopen打开文件有两种模式:一种是文本模式,一种是二进制模式.那这两种模式之间有什么区别,是不是使用文本模式打开的文件就只能使用文本函数比如fprintf来操作,而使用二进制打开的文件就 ...

  4. oldboy s21day07(深浅拷贝及文件操作)

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.看代码写结果'''v1 = [1, 2, 3, 4, 5]v2 = [v1, v1, v1]v1.app ...

  5. python目录和文件操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 要操作目录,必须引入os模块 import os1.得到当前工作目录,即当前Python脚本工作的目录路径: os ...

  6. python-with管理文件上下文(基本文件操作)

    什么是文件 文件是操作系统为用户提供的一个读写硬盘的虚拟单位,文件的操作就是文件的读.写. 操作过程:当我们双击文件 -<- 操作系统接收到指令请求(将用户或应用程序的读写操作转换成集体的硬盘指 ...

  7. Day 09 文件操作

    什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位.文件的操作是基于文件,即文件的操作核心就是:读和写.也 就是只要我们想要操作文件就是对操作系统发起请求,然后由操作系统将用户或应 ...

  8. 八.python文件操作

    一,初识文件操作. 引子: 现在这个世界上,如果可以操作文件的所有软件都消失了,比如word,wps等等,此时你的朋友通过qq给你发过来一个文件,文件名是:美女模特空姐护士联系方式.txt,在座的所有 ...

  9. python04篇 文件操作(二)、集合

    一.文件操作(二) 1.1 利用with来打开文件 # with open ,python 会自动关闭文件 with open('a.txt', encoding='utf-8') as f: # f ...

随机推荐

  1. 51nod_1490: 多重游戏(树上博弈)

    题目链接 该题实质上是一个树上博弈的问题.要定义四种状态--2先手必胜 1先手必败 3可输可赢 0不能控制 叶子结点为先手必胜态: 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态: 若某结点的 ...

  2. Angularjs跳转切换至对应选项卡

    //跳转前页面 <div class="list user_order" ng-click="userOpen('userOrder',0)"> & ...

  3. android-iconify 使用详解

    android-iconify 使用详解 有图有真相 1.android-iconify简介 iconify的github地址:https://github.com/JoanZapata/androi ...

  4. 那些年,用C#调用过的外部Dll

    经常有人找到我咨询以前在csdn资源里分享的dll调用.算算也写过N多接口程序.翻一翻试试写篇随笔. 明华IC读写器DLL 爱迪尔门锁接口DLL 通用OPOS指令打印之北洋pos打印机dll 明泰非接 ...

  5. 再起航,我的学习笔记之JavaScript设计模式03

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上一 ...

  6. app请求服务器数据方法1-HttpUrlConnection

    1. 实例化URL对象 首先第一步实例化一个URL对象,传入参数为请求的数据的网址. URL url = new URL("http://www.imooc.com/api/teacher? ...

  7. whatwg-fetch源码分析

    fetch 是什么 XMLHttpRequest的最新替代技术 fetch优点 接口更简单.简洁,更加语义化 基于promise,更加好的流程化控制,可以不断then把参数传递,外加 async/aw ...

  8. 生成二维码的js以及调用打印插件

    插件: qrcode.js 插件下载网址:http://code.ciaoca.com/javascript/qrcode/ 用法实例: <script type="text/java ...

  9. Java 库:为 Java 程序员而生的 10 + 最佳库

    众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...

  10. java变量、二进制、数据类型、原码、补码、反码

    1. 变量  1. 他 她 我 你 某人 佚名 旺财 X-man x = 1     您好! 它    (变量就是自然语言中的代词)  2. int age = 15;// 00000000 0000 ...