2019年11月21日 / 861次阅读 / Last Modified 2019年11月21日
内置函数
在python中,打开文件的open函数,支持多种文件打开的方式,本文尝试做点小小的总结。
r,文本方式只读,默认
这是打开文件默认的方式,因此这个参数可以省略。
>>> f = open('text.txt')
>>> f.read()
'abcde\n12345\n'
>>> f.readable()
True
>>> f.writable()
False
>>> f.tell()
12
>>> f.close()
w,创建新文本文件,如果文件已存在,源文件内容全部消失!
>>> f = open('text2.txt','w')
>>> f.write('abcde\n12345')
11
>>> f.tell()
11
>>> f.seek(0)
0
>>> f.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: not readable
>>> f.close()
>>> f = open('text2.txt','r')
>>> f.read()
'abcde\n12345'
>>> f.close()
>>> f = open('text2.txt','w')
>>> f.close()
>>> f = open('text2.txt')
>>> f.read()
''
>>> f.close()
用w模式创建一个text2.txt,写入两行文本,关闭后读取。这时,再次使用w模式创建同名的文件,原文件中的内容就被清空了。注意:用w模式打开的文件,不可读取,要重新用r模式打开才可以读。
a,追加写入文本模式
追加的模式,就是在文件的末尾写入,不破坏文件原来的内容。
>>> f = open('text.txt')
>>> f.read()
'abcde\n12345\n'
>>> f.close()
>>> f = open('text.txt','a')
>>> f.tell()
12
>>> f.write('66778899\n')
9
>>> f.tell()
21
>>> f.seek(0)
0
>>> f.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: not readable
>>> f.close()
>>> f = open('text.txt')
>>> f.read()
'abcde\n12345\n66778899\n'
>>> f.close()
追加模式下,文件依然不可读取,只能写入。如果文件不存在,a模式与w模式一样,创建新文件。
r+,可读可写,不创建文件
请特别注意r+模式下的写入方式,不是插入,而是覆盖!
>>> f = open('text.txt','r+')
>>> f.read()
'abcde\n12345\n66778899\n'
>>> f.seek(0)
0
>>> f.write('beginning...\n')
13
>>> f.seek(0)
0
>>> f.read()
'beginning...\n6778899\n'
>>> f.close()
>>> f = open('notexist.txt', 'r+')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'notexist.txt'
写入的哪些字符,将原来的内容覆盖了!
w+,可读可写,清空源文件,或创建新文件
用w模式打开的文件,只能写不能读,而w+就可以读了。不过,还是要小心,w+模式打开的文件,依然会将文件原来的内容全部删除。
>>> f = open('text.txt')
>>> f.read()
'www.maixj.net\nwww.pynote.net\n\n'
>>> f.close()
>>> f = open('text.txt', 'w+')
>>> f.read()
''
>>> f.write('www.pynote.net\n')
15
>>> f.tell()
15
>>> f.seek(0)
0
>>> f.read()
'www.pynote.net\n'
>>> f.close()
a+,追加写入,可读,不清空源文件,但会创建新文件
虽然可以读,可以将文件指针指向最开始,但是写入依然是在文件最后进行。这个细节有写场景会很方便。
>>> f = open('text.txt')
>>> f.read()
'www.pynote.net\n'
>>> f.close()
>>> f = open('text.txt','a+')
>>> f.tell()
15
>>> f.seek(0)
0
>>> f.read()
'www.pynote.net\n'
>>> f.seek(0)
0
>>> f.write('123\n')
4
>>> f.seek(0)
0
>>> f.read()
'www.pynote.net\n123\n'
以上是6种文本文件的打开方式(默认是打开文本文件),如果带上字母b,就变成了二进制文件的打开方式,其含义是一样的。因此二进制文件的打开方式有:rb,wb,ab,rb+,wb+,ab+。
x,如果文件不存在,就创建
x模式用来创建文件,虽然在此模式下也可以写入。不过官方的解释是 open for exclusive creation, failing if the file already exists
>>> f = open('text.txt','x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'text.txt'
>>> f = open('1234.txt','x')
>>> f.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: not readable
>>> f.write('abc\n')
4
>>> f.tell()
4
>>> f.close()
>>> f = open('1234.txt')
>>> f.read()
'abc\n'
>>> f.close()
使用r,只会文件不存在;使用w,如果文件存在就完蛋了;使用a,写入只能在末尾进行。只有x,文件不存在就创建,文件存在抛出异常,不影响源文件内容。
-- EOF --
本文链接:https://www.pynote.net/archives/1541
《open打开文件的方式总结》有2条留言
前一篇:用open判断文件系统层面的读写权限
后一篇:启用python自带的http服务器
©Copyright 麦新杰 Since 2019 Python笔记
r+这种方式,有什么特别的应用场景? [ ]
文件对象的readable和writable函数,在打开文件后使用,因为不同的打开方式,这两个函数的返回值也不尽相同。 [ ]