开发者学堂课程【Python入门 2020年版:文件的打开方式】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10397
文件的打开方式
内容简介
一、回顾
二、三种主要模式
三、其它模式
一、回顾
在上次讲了 open 的参数,有 file、mode 和 encoding。
# file:用来指定打开的文件(不是文件的名字,而是文件的路径)
#mode :打开文件时的模式,默认是 r 表示只读。
#encoding:打开文件时的编码方式。
二、三种主要模式
mode 指的是打开文件的打开方式
打开方式有:
1)r:只读模式,默认,打开文件以后,只能读取不能写入。如果文件不存在,会报错。
输入代码
file=open('xxx.txt','r')
print(file.read())
file.close()
运行结果为 今天天气好晴朗
这时可以读到该内容,但是现在是否可以进行写入呢?注释掉 print(file.read()),输入
file.write('hello')
再来运行,结果会报错,显示 io.UnsupportedOperation: not writable 不能够写入,不能执行写入操作,会报错
注释掉以上代码再来输入
file=open('xs.txt','r')
file.close()
该文件不存在,试着运行,结果显示报错
2)w:写入模式,打开文件以后只能写入,不能读取。如果文件存在,会覆盖文件;如果文件不存在,会创建文件。
输入代码:
file=open('xxx.txt','w')
file.read()
file.close()
运行报错显示:not readable 不能够执行读取,会报错
另外此时是以 w 打开 xxx 文件,打开后没有内容,会覆盖掉,再来写入内容:输入
file.write('hello')
xxx.txt 文件中会显示出 hello
如果不存在,例如输入
file=open('yyy.txt','w')
本来文件不存在,运行以后,新建了一个 yyy 文件
3)b:以二进制的形式打开文件,可以用来操作非文本文件。
rb:以二进制读取 wb:以二进制写入
现在 xxx.txt 中将 hello 修改为你好,然后继续输入代码:
file=open('xxx.txt','rb')
print(file.read())
运行结果显示 b’\xc4\xe3\xba\xc3’,读取的结果是二进制
再来输入
file=open('xxx.txt','wb')
file.write('
大家好才是真的好')
运行结果报错,TypeError: a bytes-like object is required,
not’str’,只能写入二进制,修改代码为
file.write('大家好才是真的好'.encode('utf8'))
运行后查看 xxx.txt 结果就显示为 大家好才是真的好
(思考 wb 二进制有什么用?
我们现在读的文本都是文字,如果现在想要加载一个图片,像类似这种读一些非文字就可以使用二进制)
三、其它模式
1)a:追加模式,会在最后追加内容。如果文件不存在,会创建文件;如果文件存在,会追加
2)r+:可读写。如果文件不存在,会报错
3)w+:可读写。如果文件存在,会覆盖文件;如果文件不存在,会创建文件。这两种可读可写方式不常用。在开发时,不会使用这类操作。存在一个指针问题,先来输入代码演示:
file=open('yyy.txt','w+')
print(file.read())
file.close()
在 yyy.txt 中添加内容:呵呵呵,我是 yyy
再来运行,结果未报错,但是无内容,此时 yyy.txt 中页无内容,被覆盖再来添加代码:
file.write('哈哈哈')
运行结果仍没有内容,但是 yyy.txt 中存在哈哈哈
因为在 yyy.txt 中输入哈哈哈时,光标在最后,所以读不到东西
如果需要可以添加:
file.seek(0,0)
运行结果就为哈哈哈
写入之后,文件指针到最后,需要调用 seek 将文件指针重置到开头
w+、r+此类操作不常用,一般情况下只做单一的文件操作,要么读要么写
此外还有一些别的形式可以了解:
a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。