70. with open( ) as 以自动关闭文件的方式打开文件

70. with open( ) as 以自动关闭文件的方式打开文件

1. 知识回顾

1. open函数语法参考

open 函数语法如下:

open(file, mode='r', encoding='None', errors='None')

参数 file 表示要打开文件的路径

参数 encoding 表示文件的编码方式,文件编码方式一般为 ‘utf-8’。

参数 errors 表示读写文件时碰到错误的报错级别。

参数 mode 决定了打开文件的模式。

r:以只读模式打开文件。

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

参数 mode 可以不写,不写时mode默认值为r,即只读模式。

2. 准备工作

  1. 在D盘里新建一个文件夹命名为安迪

  2. 安迪文件夹里新建1个名为70的文件夹,在70文件夹里新建一个70.ipynb文件。

  3. 用vscode编辑器打开的名为安迪的文件夹。

  4. 在名为70的ipynb文件中编写下面的代码。

【备注】

编辑器打开的文件夹不同,则相对路径不同。

3. mode模式知识回顾

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

# w只写模式
f = open ("花名册.doc", "w", encoding="utf-8")

# 写入的内容
f.write("王小溪")

# 关闭文件
f.close()

"花名册.doc"是函数open的file参数,表示文件的相对路径。

运行上述代码,我们在70文件夹中新建了一个名为花名册.doc的文件。

并向花名册.doc文件写入了王小溪

重点关注最后一行代码,使用open函数打开文件,必须使用close来关闭文件。

# 关闭文件
f.close()

我们用绝对路径新建一个绝对花名册.doc文件,代码如下所示:

# w只写模式
f = open (r"D:\安迪\70\绝对花名册.doc", "w", encoding="utf-8")

# 写入的内容
f.write("王小溪")

# 关闭文件
f.close()

注意,绝对路径参数前面加上一个字母r/R,这时候就不需要使用反斜杆进行路径转义了。

上面的代码中我们都使用了close方法来关闭文件。

为了使代码更简洁,我们可以使用 with open 语句对 open 语句进行优化。

2. with open 语句的作用

【体验代码】

【open语句】

f = open ("花名册1.doc", "w", encoding="utf-8")
f.write("王小溪")
f.close( )

【with open 语句】

with open ("花名册2.doc", "w", encoding="utf-8") as f :
    f.write("王小溪")

上述2段代码实现的功能都是新建一个doc文件,并向文件写入王小溪

【区别是】

open 语句需要使用close关闭文件。

with open 语句不需要使用close关闭文件。

with open() as ... 是对原有 open( ) 和 close( ) 的优化。

使用with open() as ...语句时,代码块运行完毕后,程序会自动关闭文件,不用再写 close( )语句来关闭文件。

用法是把open()函数放在 with 后面,把变量名放在as后面,结束时要加冒号,然后把要执行的代码缩进到with open() as ...下方的代码块中。

3. with open 语句语法

with open ("花名册2.doc", "w", encoding="utf-8") as f :
    f.write("王小溪")
  1. 固定搭配 with open

  2. 语句参数;with open语句的参数和open函数的参数一样;

  3. 参数后接固定搭配 as ;

  4. as后紧跟接收文件对象的变量名f;(open 和with open返回的都是文件对象)

  5. 英文冒号:

  6. 四个空格的缩进;

  7. 缩进后紧跟代码块。

4. with open 语句实操

【目标任务】

  1. 用绝对路径和相对路径2种方法新建工资表文件;

  2. 工资表文件分别存放于桌面上和我们刚才新建的70文件夹中;

  3. 工资表文件中写入3个姓名及对应的工资。

【思路分析】

步骤1. 首先确定file参数:

绝对路径参数:

filename = r"C:\Users\xiaoyuzhou\Desktop\工资表.doc"

相对路径参数:

filename = "工资表.doc"

步骤2: 确定mode参数:

我们的额需求是写入且不覆盖原有内容,因此,这里我们可以直接用a追加模式。

初学者编写代码时可首先写好下面的框架:

with open (filename, "a", encoding='utf-8') as f:

然后添加路径参数:

filename = r"C:\Users\xiaoyuzhou\Desktop\工资表.doc"
with open (filename, "a" ,encoding='utf-8') as f:

最后添加要写入的内容:

filename = r"C:\Users\xiaoyuzhou\Desktop\工资表.doc"
with open (filename, "a" ,encoding='utf-8') as f:
    f.write("张三,9000元\n李四,8000元\n王五,6000元")

绝对路径参数前面加上一个字母r/R,这时候就不需要使用反斜杆进行路径转义了。

上方代码中的最后一行代码中的\n是转义字符,作用是换行。

filename = "工资表.doc"
with open (filename, "a" ,encoding='utf-8') as f:
    f.write("张三,9000元\n李四,8000元\n王五,6000元")

运行上述代码,大家就可以查看对应的文件夹里已新建了一个工资表.doc文件,并成功写入了对应的内容。

【温馨提示】

  1. 容易犯的错误是mode参数要记得加引号,部分初学者容易忘记这个引号。
"a"
  1. 注意with open 语句也有4个空格的缩进。

  2. 初学者路径参数最好用变量存储,这样在比较复杂的程序中,如果有错误,方便修改。

filename = r"C:\Users\xiaoyuzhou\Desktop\工资表.doc"

5. 总结

1. 代码总结

【绝对路径】

filename = r"C:\Users\xiaoyuzhou\Desktop\工资表.doc"
with open (filename, "a" ,encoding='utf-8') as f:
    f.write("张三,9000元\n李四,8000元\n王五,6000元")

【相对路径】

filename = "工资表.doc"
with open (filename, "a" ,encoding='utf-8') as f:
    f.write("张三,9000元\n李四,8000元\n王五,6000元")    

2. 重点知识

绝对路径参数前面加上一个字母r/R,这时候就不需要使用反斜杆进行路径转义了。

with open语句不需要使用close关闭文件。

注意with open 语句也有4个空格的缩进。

3. mode模式

w:以只写模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则覆盖文件的内容。

a:以追加模式打开文件,不能读内容。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加。

r:以只读模式打开文件。

4. 图片总结

在这里插入图片描述

5. 温馨提示

如果初学者在文件读写式遇到报错,首先考虑是file路径参数的错误。建议大家回看相对路径的相关知识,相对路径是非常重要的一个知识点,这个知识点必须理解清楚。不懂的小伙伴可私我。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值