创建文件对象
**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)
except BaseException as e:
print(e)
finally:
f.close()
with语句(上下文管理器)
with关键字
(上下文管理器)可以自动管理上下文资源,不论什么原因跳出 with块 ,都能确保文件正确的关闭,
并且可以在代码块执行完毕后自动还原进入该代码块时的现场
实操代码
# 【操作】使用 with 管理文件写入操作
s = ["齐格飞"] * 3
with open(r"d:\\cc.txt", "w") as f:
f.writelines(s)
全部0条评论
快来发表一下你的评论吧 !