f = open('info.txt', mode='r', encoding='utf-8') # 模式是r/rt,必须在内部使用encoding将文本转换成字符串类型
data = f.read()
f.close()
f = open('info.txt', mode='rb') # 模式是rb,不能加encoding,否则报错;可以对读取的内容进行解码,否则得到的就是二进制内容
data = f.read()
f.close()
f = open('info.txt', mode='r', encoding='utf-8')
# 读1个字符
data = f.read(1)
f.close()
print(data)
f2 = open('info.txt', mode='rb')
# 读1个字节
data2 = f2.read(1)
f2.close()
print(data2)
"""
readline() 从光标位置开始,每次只读取一行
"""
f = open('info.txt', mode='r', encoding='utf-8')
# 读一行
v1 = f.readline()
v2 = f.readline()
print(v1) # 这是我第一次写入的内容
print(v2) # 22112
f.close()
"""
由于上面打开文件后关闭了
下面再次打开文件
光标从首行的内容头开始
"""
f2 = open('info.txt', mode='r', encoding='utf-8')
# 读一行
v3 = f2.readline()
print(v3) # 这是我第一次写入的内容
f2.close()
f = open('info.txt', mode='r', encoding='utf-8')
# 读所有行
v1 = f.readlines()
print(v1) # ['这是我第一次写入的内容\n', '22112']
f.close()
f = open('info.txt', mode='r', encoding='utf-8')
# 循环读大文件内容
for line in f:
print(line.strip()) # 使用strip函数取消换行
f.close()
f = open('files/account.txt', mode='a', encoding='utf-8') # 不清空内容尾部追加,不加encoding写入的中文字符会是乱码
while True:
user = input("请输入用户名:")
if user.upper() == 'Q':
break
pwd = input("请输入密码:")
data = "{}-{}\n".format(user, pwd)
f.write(data)
# 立即将缓冲区数据刷到硬盘
f.flush()
f.close()
f = open('info.txt', mode='r+', encoding='utf-8')
# 移动光标位置,在光标之后覆盖式写内容(如:你好中国,则会使用徐伟将好中覆盖)
# 移动到指定字节位置(一个中文字符代表三个字节)
f.seek(3)
f.write("徐伟")
f.close()
注意:a模式打开,永远先将光标移动到最后,再写内容
可能出现乱码:中文一个字符等于3个字节,英文一个字符是一个字节(没法使用5个字节覆盖2个中文字符)
使用tell获取字节的位置
f = open('info.txt', mode='r+', encoding='utf-8')
# 使用tell获取字节位置
p1 = f.tell()
print(p1) # 0
f.read(3) # 模式是r+,所以读三个字符
p2 = f.tell()
print(p2) # 中文三个字符是9个字节,所以输出:9
f = open('info.txt', mode='rb')
# 使用tell获取字节位置
p1 = f.tell()
print(p1) # 0
f.read(3) # 模式是rb,所以读三个字节
p2 = f.tell()
print(p2) # 3