Python文件操作(04):常见功能

一、read,读

1、读所有

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()

2、读n个字符(字节)

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,读一行

"""
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()

三、readlines,读所有行,每行作为列表的一个元素

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()

五、flush,刷到磁盘

  1. 使用write不是写到了硬盘,而是写在缓冲区,系统会将缓冲区的内容刷到硬盘
  2. flush立即将缓冲区的数据刷到硬盘
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个中文字符)

Python文件操作(04):常见功能_第1张图片

Python文件操作(04):常见功能_第2张图片Python文件操作(04):常见功能_第3张图片

七、获取当前光标的位置

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

 

你可能感兴趣的:(python,开发语言)