金华网站制作价格,创意网名昵称大全,秦皇岛网站群发关键词,微信上怎么开店概述
计算机都是以二进制存储文件的#xff0c;如mp3、图片等#xff0c;文本文件也是如此#xff0c;在本节中以二进制模式写入文件
写文件的很多操作#xff0c;与读文件的操作是相同的#xff0c;建议先看 读取二进制文件
打开文件
读写文件#xff0c;要先通过内置op…概述
计算机都是以二进制存储文件的如mp3、图片等文本文件也是如此在本节中以二进制模式写入文件
写文件的很多操作与读文件的操作是相同的建议先看 读取二进制文件
打开文件
读写文件要先通过内置open()函数打开文件
open(文件路径,mode模式)
常用参数说明:
file: 必需文件路径相对或者绝对路径。
mode: 可选文件打开模式可省略。详细介绍在下面
注意
采用 二进制 模式读取文件时不要 指定编码否则报错
ValueError: binary mode doesnt take an encoding argument
常用模式:
‘wb’只写
以二进制格式打开一个文件只用于写入。
如果该文件已存在则打开文件清空文件内容 并开头开始编辑。
如果该文件不存在创建新文件。
‘wb’读写
以二进制格式打开一个文件用于读写。
如果该文件已存在则打开文件先 清空文件内容 并从开头开始编辑也就是说打开文件后读取该文件内容是空的。写入文件后可读取文件
如果该文件不存在创建新文件。
‘ab’追加
以二进制格式打开一个文件用于追加。
如果该文件已存在文件指针将会放在文件的结尾。也就是说新的内容将会被写入到已有内容之后。
如果该文件不存在创建新文件进行写入。
‘ab’追加且可读
以二进制格式打开一个文件用于追加。
如果该文件已存在文件指针将会放在文件的结尾。文件打开时会是追加模式。
如果该文件不存在创建新文件用于读写。
例子fopen(d:\\1.txt,wb)
关闭
从 读取文本文件 章节可知一般情况操作完文件后应及时关闭
关闭后将内存中的 数据 立刻 写入 文件中解释见下面写入文件
f.close()
异常处理
异常处理同读取文件操作try...finally...和with语句都适用
写入文件
写入是将 内存 中的数据保存在 硬盘 中写入文件主要有两种方法
方法1
将数据写入文件
lenwrite(data)
参数
data要写入文件的数据二进制字节序列如bytes等
返回值
返回的是写入的长度以字节为单位。
例子1
通过 二进制 模式将字符串“长风破浪会有时【换行】直挂云帆济沧海”写入文件代码如下
with open(c:/users/mym/desktop/6.txt,wb) as f:
lenf.write(长风破浪会有时\r\n直挂云帆济沧海)
print(len)
报错如下
TypeError: a bytes-like object is required, not str
类型错误应该类似bytes类型的数据
例子2
改造上面的程序调用str的 encode()方法将字符串编码为bytes类型采用GBK编码如下
with open(c:/users/mym/desktop/6.txt,wb) as f:
lenf.write(长风破浪会有时\r\n直挂云帆济沧海.encode(GBK))
print(len)
执行结果如下
30
在GBK编码中一个汉字占2个字节所以写14个汉字是28个字节在加上换行符\r\n两个字节一共是30个字节
换行符
用 二进制 模式写入文本文件时我们要自己写换行符的原始码在UNIX、linux中的换行符是\n在windows中换行符是\r\n各家系统的换行符可能不同所以要我们自己根据系统写换行符
例子2
上面例子直接将换行符 写在代码 中不利于 跨平台
比如在windows系统上开发将换行符\r\n写在代码中但在运行时可能是在linux系统中那么写入文件时还是\r\n与linux系统不符linux的换行符是\n可能会出现错误
改造上面的程序动态获取换行符如下
import os
with open(c:/users/mym/desktop/6.txt,wb) as f:
s长风破浪会有时os.linesep直挂云帆济沧海
lenf.write(s.encode(GBK))
print(len)
方法2不报错不推荐
将序列中的字符串写入到文件序列必须 全是字符串如list、dict等
writelines( [ str ])
参数
str要写入文件的字符串序列
返回值
无
flush()
刷新缓冲区将 缓冲区中 的数据立刻 写入 文件中
f.flush()
例子import time
with open(c:/users/mym/desktop/2.txt,wb) as f:
f.write(白日依山尽\n黄河入海流\n)
f.flush()
f.write(欲穷千里目\n更上一层楼\n)
time.sleep(10)
休眠10秒在10秒内打开文件可以看到下面内容
白日依山尽
黄河入海流
因为执行了flush()方法刷新缓冲区写入文件。10秒后执行结束再次将缓冲区中的数据写入文件中最后结果如下
白日依山尽
黄河入海流
欲穷千里目
更上一层楼
移动文件指针
从读取二进制文件章节可知写入带有中文的文本文件时移动指针可能会造成错误所以处理中文文本文件时一般不要将文件指针移动到文件中间位置。移动到头部不会造成错误