文件操作模式(mode)
覆盖写入模式:指覆盖文件已存在的数据
mode | 说明 |
---|
w | 覆盖写入模式,文件不存在则创建, 不可读取数据 | w+ | 覆盖写入模式,文件不存在则创建,可以读取数据 | wb | 二进制覆盖写入模式(要求写入数据是bytes),文件不存在则创建,不可读取数据 | wb+ | 二进制覆盖写入模式(要求写入数据是bytes),文件不存在则创建,可以读取数据 | a | 追加写入模式,文件不存在则创建,不可读取 | a+ | 追加写入模式,文件不存在则创建,可读取 | ab | 二进制追加写入模式,文件不存在则创建,不可读取 | ab+ | 二进制追加写入模式,文件不存在则创建,可读取 | r | 读模式,文件不存在则报错,不可写入 | r+ | 读模式,文件不存在则报错,可写入 | rb | 二进制读模式,文件不存在则报错,不可写入 | rb+ | 二进制读模式,文件不存在则报错,可写入 |
文件打开
import os
if __name__ == '__main__':
"""
open(path,mode) 返回可操作文件对象io
path:文件路径
mode:文件操作模式,默认r
"""
home = open(os.path.join(os.getcwd(), 'a.txt'))
print(home)
print(type(home))
文件关闭
import os
if __name__ == '__main__':
"""
io.close() 释放文件资源
io:通过open(path,mode)得到的可操作文件对象
通过io.closed属性查看文件是否已经释放
"""
f = open(os.path.join(os.getcwd(), 'a.txt'))
print(f.closed)
f.close()
print(f.closed)
文件写入
import os
if __name__ == '__main__':
"""
io.write(content) 写入文件
io.writelines(content|list(content1,content2......)) 写入文件
io:open(path,mode)得到的文件对象且mode是写入模式
context,content1,content2......:在二进制的写入模式下为bytes,其余为string
write和writtelines都能写入。
只不过writelines除了接受content这种格式,还能接受list(content1,content2......) 格式,结果等价于 io.write(content1+content2+......)
"""
f = open(os.path.join(os.getcwd(), 'a.txt'), 'w')
f.write('abc\n')
f.writelines(['abc\n', 'context'])
f.close()
f = open(os.path.join(os.getcwd(), 'b.txt'), 'wb')
f.write(b'abc\n')
f.writelines([b'abc\n', b'context'])
f.close()
文件读取
import os
if __name__ == '__main__':
"""
io:open(path,mode) 得到的可操作文件对象
1.io.read() 从指针位置开始读取数据,直至文件末尾
2.io.readline(limit=-1) 从指针位置开始读取数据,最多读完该行
limit:读取的字符数,-1代表将一行读完。
3.io.readlines() 从指针位置开始读取数据,直至文件末尾。将每一行的数据都放入列表中,返回一个列表
4.io.seek(offset) 移动指针到指定位置
"""
f = open(os.path.join(os.getcwd(), 'a.txt'), 'r')
print(f.read())
f.seek(0)
print(f.readline(2))
print(f.readline(5))
f.seek(0)
print(f.readlines())
f.close()
操作模式带+与不带+的区别
import os
if __name__ == '__main__':
'''
权限具有两种:读和写,+代表具有另一种权限
w:写 w+:读写
r:读 r+ 读写
'''
file_path = os.path.join(os.getcwd(), 'a.txt')
f = open(file_path, 'w+')
f.write('abc')
f.seek(0)
print(f.read())
f.close()
file_path = os.path.join(os.getcwd(), 'b.txt')
f = open(file_path, 'r+')
f.write('abcd')
f.seek(0)
f.write('efg')
f.seek(0)
print(f.read())
f.close()
file_path = os.path.join(os.getcwd(), 'c.txt')
f = open(file_path, 'a+')
f.write('abc')
f.seek(0)
f.write('efg')
f.seek(0)
print(f.read())
f.close()
使用 with + open(path,mode) 自动关闭文件
import os
if __name__ == '__main__':
"""
a.txt:abc
使用 with open(path,mode) as f:
逻辑.......
跳出with的逻辑后自动调用f.close()关闭文件
使用with + open 不再需要自己手动关闭文件了
"""
file_path = os.path.join(os.getcwd(), 'a.txt')
with open(file_path, 'r') as f:
print(f.read())
print(f.closed)
|