文件访问模式详解
打开文件 open()
参数1 文件路径
路径 url :统一资源定位符
相对路径:目标文件相对于当前文件所在的位置
1. ./1.txt ./ 当前目录中的 1.txt
2. 1.txt 文件前没有任何表示时,默认为当前目录中的 1.txt
3. ../a/1.txt ../ 当前目录的上一级目录中的 a 文件下的 1.txt
绝对路径:目标文件的完整位置
windows: c:/user/adddate/1.txt
Linux: /user/home/yc/1.txt
参数2 访问模式
基础模式:w r x a
w 模式:write 写入模式
1.文件不存在则创建文件
2.文件存在则打开文件,并清空文件内容
3.文件打开后,指针在文件的最前面
r 模式(默认模式):read 读取模式
1.文件不存在则引发异常
2.文件存在则打开文件
3.文件打开后,指针在文件的最前面
x 模式:xor 异或模式
1.文件不存在则创建文件
2.文件存在则引发异常(防止覆盖)
3.文件打开后,指针在文件的最前面
a 模式:append 追加模式
1.文件不存在则创建文件
2.文件存在则打开文件
3.文件打开后,指针在文件的最后面
扩展模式
b 模式:bytes 二进制
+ 模式:plus 增强模式(可读可写)
文件打开模式的组合
w,r,x,a
wb,rb,xb,ab
w+,r+,x+,a+
wb+,rb+,xb+,ab+
参数 encoding 可选参数,设置文件的字符集
如果是二进制的文件,则不需要设置字符集
encoding='utf-8'
w,r,x,a 模式访问文件
# 1.打开文件
# 以指定路径和模式,创建一个文件对象
fp = open('./1.txt','a',encoding='utf-8')
# 使用r模式打开不存在的文件则引发异常
# FileNotFoundError: [Errno 2] No such file or directory: './2.txt'
# 使用x模式打开已存在的文件则引发异常
# FileExistsError: [Errno 17] File exists: './1.txt'
# 2.读写文件
# 使用文件对象调用 write() 或 read()
# w
fp.write('w mode write test')
# r
res = fp.read()
print(res)
# x
fp.write('x mode write test')
# a
fp.write(' ____ a mode write test')
# 3.关闭文件
# 使用文件对象,调用 close() 关闭文件
fp.close()
扩展模式访问文件
任何一种扩展模式访问文件,都遵循基础访问模式的特点
w+, r+, a+ 的区别
# 创建test2
f = open('test2.txt','w',encoding='utf-8')
f.write('''abcde
fghij''')
f.close()
# w+
fp = open('test2.txt','w+')
fp.write('w+M')
res = fp.read()
print(res)
fp.close()
'''
1.清空test2
2.写入'w+M',指针在末尾
3.读取
w+M ←P
'''
# r+
fp = open('test2.txt','r+')
fp.write('r++MODE')
res = fp.read()
print(res)
fp.close()
'''
1.指针在开头
2.写入'r+MOME',指针在 E 后面
3.读取
r++MODE ←P fghij
'''
# a+
fp = open('test2.txt','a+')
fp.write('a+M')
res = fp.read()
print(res)
fp.close()
'''
1.指针在末尾
2.写入'a+M',指针在末尾
3.读取
abcde
fghija+M ←P
'''