创建文件对象
**open()
函数用于创建文件对象,基本语法格式如下:**open(文件名[,打开方式])
注意:
如果只是文件名,代表在当前目录下的文件.
文件名可以录入全路径,比如:D:\\a\\b.txt
可以使用原始字符串r“d:\\b.txt”
减少\\
的输入,
因此以上代码可改写成f = open(r"d:\\b.txt","w")
作为入参的打开方式如下(经常会用!!!)
文本文件对象和二进制文件对象的创建如果是二进制模式
b ,则创建的是二进制文件对象,处理的基本单元是“字节” 如果没有增加模式 b
,则默认创建的是文本文件对象,处理的基本单元是“字符”
文件的写入
文本文件的写入一般就是三个步骤:
实操代码
# 1.使用open()方式f =open(r"d:\\a.txt","a") s ="TimePause\\n时间静止\\n"f.write(s) f.close()
结果展示
代码编写时
windows
操作系统默认的编码是 GBK , Linux 操作系统默认的编码是 UTF- 8 .**当我们用
open() 时,调用的是操作系统相关api来打开的文件,并且默认的编码是 GBK 但是由于我们通常习惯将所有代码编码都设置成 UTF- 8 .,
因此在打开时会出现乱码问题, 如下图所示**
解决方案:按照上图提示,
将文本编码设置成 GBK格式读取即可注意:我们还可以通过指定编码来解决中文乱码问题.
因为我们将pycharm
文本读写编码都设置成
utf-8, 因此只要 **我们在文件写入的时候规定编码为
utf-8(默认gbk)** , 那么我们在读取时就不会出现乱码. 如下代码
实操代码
# 【示例】通过指定文件编码解决中文乱码问题f =open(r"d:\\bb.txt","w", encoding="utf-8") f.write("一个有温情的小站\\n时间静止不是简史") f.close()
控制台输出时****问题描述
我们一般习惯把pycharm所有字符编码设置成utf-8时.
在我们进行网络请求时, 有时候会返回乱码问题, 如下图
问题分析
因为我们在
pycharm 设置所有字符编码均为 UTF-8, 但是**通过网络请求得到GBK格式的文本,
然后我们仍以 UTF-8 编码去解码就会出现乱码**
解决方案
可以将项目编码设置成GBK格式即可;
也可以通过文本操作代码对得到的数据进行GBK格式读取 亦或者在写入时, 直接将编码声明为UTF-8
write()/writelines()写入数据
write(a)
:把字符串
a 写入到文件中
writelines(b)
:把字符串列表写入文件中,不添加换行符
实操代码
# 【操作】添加字符串列表数据到文件中f =open(r"d:\\bb.txt",'w', encoding="utf-8") s = ["什么鬼\\n"] *3# 通过 \\n实现手动换行f.writelines(s) f.close()
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用
close() 方法关闭文件对象. 当调用 close() 方法时,首先会把缓冲区数据写入文件(也可以直接调用 flush()
方法),再关闭文件,释放文件对象
注意:
close()
一般结合异常机制的
finally 一起使用
也可以**通过
with 关键字实现无论何种情况都能关闭打开的文件对象(推荐)**
实操代码
# 【操作】结合异常机制的 finally ,确保关闭文件对象# "a" 设置打开方式为追加模式try: f =open(r"d:\\c.txt","a") s ="来自深渊"f.write(s)exceptBaseExceptionase:print(e)finally: f.close()
with语句(上下文管理器)
with关键字
(上下文管理器)可以自动管理上下文资源,不论什么原因跳出 with块 ,都能确保文件正确的关闭,
并且可以在代码块执行完毕后自动还原进入该代码块时的现场
实操代码
# 【操作】使用 with 管理文件写入操作s = ["齐格飞"] *3withopen(r"d:\\cc.txt","w")asf: f.writelines(s)
全部0条评论
快来发表一下你的评论吧 !