python中常用打开模式的含义与区别
打开模式 | 含义 |
---|---|
r | 只读,文件不存在会报错。文件的指针将会放在文件的开头。这是默认模式。 |
r+ | 可读可写,文件不存在会报错。文件指针将会放在文件的开头。 |
w | 只写,文件不存在,会创建新文件。从开头开始编辑,原有内容会被删除。 |
w+ | 可写可读,文件不存在,会创建新文件。从开头开始编辑,原有内容会被删除。由于原有内容被删除,所以读不了具体文件内容。 |
a | 追加写入,文件不存在,会创建新文件。文件存在的话,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后。 |
a+ | 追加可写可读,文件不存在,会创建新文件。文件存在的话,文件指针将会放在文件的结尾。如果要读取文件的内容需要调整指针到文件开头。 |
从上面可以看出,“+”的作用是在原来的基础上,增加读或者写的功能。
r 模式
- 假设我们的文件名为test.txt,里面的内容为:
Hello world
Python is good
我们可以用两种方法来读取文件的内容
- 第一种:手动关闭文件的方式
这种方式需要手动打开、关闭文件,如果运行过程中出现异常,可能会造成文件没有被关闭的问题。
file = open('test.txt', 'r')
text = file.read() # 读取文件对象的全部内容
print(text)
file.close() # 关闭文件
'''
# 输出为:
Hello world
Python is good
'''
- 第二种:with语句上下文管理器的方式
这种方式会自动关闭文件,出现异常也可以自动关闭文件,使用起来更加安全方便,所以下文的演示代码都是用with语句。
with open('test.txt', 'r') as file:
print(file.read())
'''
# 输出为:
Hello world
Python is good
'''
r+ 模式
with open('test.txt', 'r+') as file:
file.write("This is 'r+' mode") # 向文件中写入内容
with open('test.txt', 'r+') as file:
print(file.read()) # 查看文件内容
'''
# 输出为:
This is 'r+' modeon is good
'''
可以看出来,r+模式在写入的时候,是覆盖写入的方式,把原文件的内容进行覆盖,没有覆盖到的内容就保留下来了。
w 模式
with open('test.txt', 'w') as file:
file.write("This is 'w' mode")
with open('test.txt', 'r') as file:
print(file.read())
'''
# 输出为:
This is 'w' mode
'''
可以看到,w模式会把原文件的内容删除掉,然后再写入新的内容,这与r+模式的写入有区别。
w+ 模式
with open('test.txt', 'w+') as file:
print(file.read())
'''
# 输出为空
'''
这说明,w+模式也会把原文件的内容删掉,虽然可读,但是文件已经没有内容了。
a 模式
with open('test.txt', 'a') as file:
file.write("\nThis is 'a' mode")
with open('test.txt', 'r') as file:
print(file.read())
'''
# 输出为:
Hello world
Python is good
This is 'a' mode
'''
可以看出,a模式具有追加写入的功能。
a+ 模式
with open('test.txt', 'a+') as file:
file.seek(0) # 将文件指针指向文件开头
print(file.read())
'''
# 输出为:
Hello world
Python is good
'''
a+模式就是在a模式的基础上增加了读取的功能,a/a+模式默认文件指针指向文件的结尾,如果不调整指针的位置,那读取的内容就是空白。