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') # 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值