open打开文件的方式总结

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条留言

您的电子邮箱地址不会被公开。 必填项已用*标注

  • 麦新杰

    r+这种方式,有什么特别的应用场景? [回复]

  • 麦新杰

    文件对象的readable和writable函数,在打开文件后使用,因为不同的打开方式,这两个函数的返回值也不尽相同。 [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top