Python-上下文管理

0 前言

>>返回Python系列文章目录<<

1 open 语句

文件平时放在电脑的硬盘中,而CPU只能读写内存中的数据。所以电脑处理文件需要分为3步:

  1. 将硬盘中的文件复制进内存,并设置文件指针,对应__enter__方法
  2. 移动指针,将内存中文件数据转为字符串,或将字符串传入文件数据
  3. 使用完毕后清除内存中文件数据,对应__exit__方法。如果允许写入,则同时修改硬盘数据

注意项:

  1. 硬盘中的文件数据只能复制到内存中,或者被内存中数据覆盖,不能修改
  2. 内存中的文件数据是_io.TextIOWrapper格式,只能使用文件指针进行操作,对应read()write()方法
  3. read()可以将内存中文件数据转换成字符串赋值给变量
f = open('/tmp/simple.txt', 'r', encoding='utf-8', errors='ignore') # f是_io.TextIOWrapper格式
data = f.read()               # 将_io.TextIOWrapper格式转为字符串赋值给data
f.close()                     # 清除_io.TextIOWrapper格式数据,释放内存

Python内置函数open()用于打开文件或创建文件对象

f = open(file_name, mode=, encoding=, errors=)
  • file_name:文件名或文件地址
  • mode:指定文件的打开模式

在这里插入图片描述

  • encoding:编码格式,通常'utf-8'

f:文件指针,有以下方法

  • f.read():以字符串形式读取所有内容,文件指针会随着读取移动
  • f.readlines():按行读取所有内容,返回列表,文件指针会随着读取移动
  • f.close():关闭文件
  • f.write(str):在文件指针处写入字符串

2 with open语句

open()语句之后一定要有close(),否则内存会一直被占用。Python提供了上下文管理器with,程序在退出with语句块时自动调用close()

即使with语句中发生错误导致程序中断,程序依然会调用close()保护内存。

with open('/tmp/simple.txt', 'r', encoding='utf-8', errors='ignore') as f:
    data = f.read()

2.1 数据有效范围

with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
    f.write('[新建text内容]')

with open('textsimple.txt', 'r', encoding='utf-8', errors='ignore') as f:
    data1 = f.read()   # data1在with语句外有效,f在with语句外无效

with open('textsimple.txt', 'r', encoding='utf-8', errors='ignore') as f:
data2 = f.read()  # 在with语句外已经无法再读取,data2错误

2.2 文件指针位置

  1. read()write()的同时会移动指针
with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
    f.write('[新建text内容,内容需要写的比较长]')

with open('textsimple.txt', 'r', encoding='utf-8', errors='ignore') as f:
    data1 = f.read()
    data2 = f.read()

print(data1)   # data1能读出数据
print(data2)   # data2时指针已在末尾,数据为空
  1. r+方式从头写入,覆盖原数据,会导致乱码
with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
    f.write('[新建text内容,内容需要写的比较长]')

with open('textsimple.txt', 'r+', encoding='utf-8', errors='ignore') as f:
    f.write('[r+]方式写入的内容')

在这里插入图片描述
3) w+方式会先清空原数据

with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
    f.write('[新建text内容,内容需要写的比较长]')

with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
    f.write('[w+]方式写入的内容')

在这里插入图片描述
4) a+方式在原数据后面补充

with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
    f.write('[新建text内容,内容需要写的比较长]')

with open('textsimple.txt', 'a+', encoding='utf-8', errors='ignore') as f:
    f.write('[a+]方式写入的内容')

在这里插入图片描述

>>返回Python系列文章目录<<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值