- 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') # r+可读可写,open时不清空内容
- # 移动光标位置,在光标之后覆盖式写内容(如:你好中国,则会使用徐伟将好中覆盖)
- # 移动到指定字节位置(一个中文字符代表三个字节)
- f.seek(3)
- f.write("徐伟")
- f.close()
注意:a模式打开,永远先将光标移动到最后,再写内容
可能出现乱码:中文一个字符等于3个字节,英文一个字符是一个字节(没法使用5个字节覆盖2个中文字符)
- f = open('info.txt', mode='r+', encoding='utf-8') # 模式r+,可读可写,open时不清空内容
- # info.txt 内容是:你好中国
- f.seek(3)
- f.write("xuwei") # 从第3个字节往后覆盖式写5个字节内容,由于info.txt全是中文所以不能将字符覆盖全,就会出现乱码
- f.close()


使用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