文件操作
f = open('d:\test.txt',mode='r',encoding='utf-8')
content = f.read()
print(content)
f.close()
'''
路径可以选用绝对路径或者相对路径
mode: 定义操作方式
encoding: 声明打开文件用什么编码本
close(): 关闭文件句柄(在内存中,必须要主动关闭)。
'''
# 读
# r模式
f = open('d:\test.txt',mode='r',encoding='utf-8')
content = f.read() # read()将文件中的内容全部读取出来,只适合小文件
# content = f.read(3) # read(n)指定读取到什么位置
.在r模式下,n按照字符读取。
# content = f.readline() # readline()读取每次只读取一行,读取出来的数据在后面都有一个\n
# 可以用content = f.readline().strip()过滤换行符
print(content)
print(f.readlines()) # readlines() 返回一个列表,列表里面每个元素是原文件的每一行
f.close()
# 可以通过for循环读取,文件句柄是一个迭代器,特点是每次循环只在内存中占一行数据,节省内存。
# rb模式 以二进制格式打开一个文件用于只读
f = open('test.txt',mode='rb')
content = f.read()
print(content)
f.close()
# r+模式 打开一个文件用于读写。文件指针默认将会放在文件的开头。
f = open("log",encoding='utf-8',mode='r+')
content = f.read()
print(content) # 读出原文件
f.write('abcd') # 在文件末尾添加字段
f.close()
'''
注意:如果在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始。要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到写完的内容,然后在后面开始读取。
'''
# r+b模式 以bytes类型操作的读写模式
# 写
# w模式 文件不存在则先创建再写入,文件存在则先清空再写入
f = open('log',mode='w',encoding='utf-8')
f.write('abcd')
f.close()
# wb模式 以二进制格式打开一个文件只用于写入
f = open('log',mode='wb')
f.write('附近看到类似纠纷'.encode('utf-8'))
f.close()
# w+模式
f = open('log',mode='w+',encoding='utf-8')
f.write('abc') # 文件存在则清空再写入
f.seek(0) # 光标移至文件开头
print(f.read())
f.close()
# w+b模式 以bytes类型操作的写读模式
# 追加
# a模式 文件不存在则先创建再写入,文件存在则在最后追加写入
f = open('log',mode='a',encoding='utf-8')
f.write('斗破苍穹')
f.close()
# ab模式 类似于wb模式,追加式写入
# a+模式 类似于w+模式,追加式写入
# a+b模式 以bytes类型操作的写读模式(追加)
文件操作的其他功能
1、read(n)
- 文件打开方式为文本模式时,代表读取n个字符
- 文件打开方式为b模式时,代表读取n个字节
2、seek()
seek(n)光标移动到n位置,注意: 移动单位是byte,所有如果是utf-8的中文部分要是3的倍数
移动到开头:seek(0) 移动到结尾:seek(0,2)
seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾
3、tell()
print(tell())可以帮我们获取当前光标在什么位置
4、readable(),writeable()
print(f.readable())和print(f.writeable())可以返回True或False来表示文件的可读写性
e.g. 用文件读写来实现一个简单的注册和登录功能

