python写入二进制文件的库_python之写入二进制文件

概述

计算机都是以二进制存储文件的,如mp3、图片等,文本文件也是如此,在本节中以二进制模式写入文件

写文件的很多操作,与读文件的操作是相同的,建议先看 读取二进制文件

打开文件

读写文件,要先通过内置open()函数打开文件

open('文件路径',mode='模式')

常用参数说明:

file: 必需,文件路径(相对或者绝对路径)。

mode: 可选,文件打开模式,可省略。详细介绍在下面

注意:

采用 二进制 模式读取文件时,不要 指定编码,否则报错:

ValueError: binary mode doesn't take an encoding argument

常用模式:

‘wb’:只写

以二进制格式打开一个文件只用于写入。

如果该文件已存在则打开文件,清空文件内容 并开头开始编辑。

如果该文件不存在,创建新文件。

‘wb+’:读写

以二进制格式打开一个文件用于读写。

如果该文件已存在则打开文件,先 清空文件内容 并从开头开始编辑,也就是说打开文件后读取该文件,内容是空的。写入文件后,可读取文件

如果该文件不存在,创建新文件。

‘ab’:追加

以二进制格式打开一个文件用于追加。

如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。

如果该文件不存在,创建新文件进行写入。

‘ab+’:追加且可读

以二进制格式打开一个文件用于追加。

如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。

如果该文件不存在,创建新文件用于读写。

例子:f=open('d:\\1.txt','wb')

关闭

从 读取文本文件 章节可知,一般情况操作完文件后,应及时关闭

关闭后,将内存中的 数据 立刻 写入 文件中,解释见下面写入文件

f.close()

异常处理

异常处理同读取文件操作,try...finally...和with语句都适用

写入文件

写入是将 内存 中的数据保存在 硬盘 中

1EF2uxsIqj9w.png

写入文件主要有两种方法

方法1

将数据写入文件

len=write(data)

参数

data:要写入文件的数据,二进制字节序列,如bytes等

返回值

返回的是写入的长度,以字节为单位。

例子1:

通过 二进制 模式,将字符串“长风破浪会有时【换行】直挂云帆济沧海”写入文件,代码如下:

with open('c:/users/mym/desktop/6.txt','wb') as f:

len=f.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:

len=f.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+'直挂云帆济沧海'

len=f.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秒后执行结束,再次将缓冲区中的数据写入文件中,最后结果如下:

白日依山尽

黄河入海流

欲穷千里目

更上一层楼

移动文件指针

从读取二进制文件章节可知,写入带有中文的文本文件时,移动指针可能会造成错误,所以,处理中文文本文件时,一般不要将文件指针移动到文件中间位置。移动到头部不会造成错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gulp插件gulp-ruby-sass和livereload插件

gulp-ruby-sass是gulp的一个插件,主要是用来实现sass编译,livereload插件主要是实现文件保存时浏览器自动刷新,避免了手动f5的频繁的操作 准备工作:chrome浏览器安装livereload插件,没有安装的可以百度搜索或者FQ下载&…

eclipse 创建 maven web 项目教程

(1)新建一个Maven 项目 file –> new –> maven project 直接点 next 直接点 next 填写groupid和artifactid,这两个可以随便填,名称而已。填完 finish (2)将项目转成 Dynamic Web项目 选中项目&#…

sql backup database备份d盘_ClickHouse 备份与恢复

本文转载自 万能修实验室 作者:公先生 ID: dropudatabase我们评估一款数据库产品,除了稳定性和易用性外,数据安全也十分重要,备份与恢复往往是最后一道安全门。但如果备份策略不完善、恢复手段无效,一旦发生数据误删除…

线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式

start 方法和 run 方法的比较代码演示:/** * * start() 和 run() 的比较 * * * author 踏雪彡寻梅 * version 1.0 * date 2020/9/20 - 16:15 * since JDK1.8 */public class StartAndRunMethod { public static void main(String[] args) { // run 方法演示 // 输出: name: mai…

webgl 游戏_如何选择 WebGL 框架和引擎?

数据可视化Sugar-百度智能云​cloud.baidu.comSugar 是我们从零开始开发的 BI 产品,可以不用写 SQL 制作报表及大屏页面,上半年我们发布了三维场景功能,可以放到大屏中展现:为了实现这个功能,我们调研了大量 WebGL 相关…

java 正则表达式 替换字符串img标签的路径_正则表达式和有限自动机的应用

1. 为什么谈有限自动机时要谈正则表达式?原因是:正则表达式所匹配的所有字符串所构成的语言可以用有限自动机识别。根本原因是:正则集(正则表达式所匹配的所有字符串集合)是由右线性文法(3型文法&#xff0…

14.6 Spring MVC 测试框架(翻译)

14.6 Spring MVC 测试框架(每天翻译一点点) Spring MVC测试框架对 Spring MVC 代码提供一流的测试支持 ,它拥有一个 fluent API ,可以和JUnit, TestNG 或其它任何测试框架协同使用。 此测试框架基于 spring-test 模块的Servlet API mock obje…

html读取本地txt_手机本地电子书籍阅读器 — 静读天下

在早期山寨按键手机流行的年代手机中必装两款软件莫过于Anyview和Opera浏览器了,一个是本地最佳阅读工具另一个是压缩流量访问网页的利器,时过境迁好多人都早以忘记了这些昔日的王者。曾经那帮挑灯夜读看小说的熊孩子都已经长大了,在难得的休…

华为手机丢失定位网站_手机端网站优化要从网站的设计和定位开始入手

移动端网站优化要从网站的设计和定位开始入手,重要的是简洁易用,切忌复杂,令用户搞不明白找不到想用的。对于搜索引擎而言,好的用户访问体验也是排名的最佳标准。下面小编就来分析一下设计对手机端网站优化排名的影响。1、使用规范…

安卓接受后台数据转换解析出错_安卓手机内存越大,速度就会越快?

与非网 2 月 18 日讯,现在安卓手机的内存在产品规划上越来越大,2020 年发布的旗舰手机运行内存已经拓展到惊人的 10GB 以上,而这个运存大小已经超过笔记本主流的 8GB 内存,手机到底需要这么大的内存吗?安卓手机的内存为…

ipv6地址格式_IPV6与IPV4的差异

ipv6相比,我们现在的IPV4,有什么优势,有什么差异IPv6的路由表更小,IPv6的组播支持以及对流的支持增强,IPv6加入了对自动配置的支持,IPv6具有更高的安全性. 与IPV4相比,IPV6具有以下几个优势:IPv6具有更大的地址空间。IPv4中规定IP…

反序列化对象列表发生异常_通过反序列化漏洞,黑客能做什么呢?

在之前的文章中讲解了一个反序列化的例子,我们已经知道,通过反序列化漏洞,黑客可以调用到Runtime.exec()来进行命令执行。换一句话说,黑客已经能够在服务器上执行任意的命令,这就相当于间接掌控了你的服务器&#xff0…

tcl之内容

转载于:https://www.cnblogs.com/chip/p/5847126.html

js密码强度正则表达式_知道这20个前端正则表达式,能让你做项目时少写1000行甚至一万行

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的…

腾讯视频客户端导出MP4格式

腾讯视频下载下来之后是.qlv格式,这种格式只能使用客户端播放。感觉挺蛋疼的,Mp4好不容易让各种设备都可以统一播放视频了,这样一搞感觉又倒退了几十年,关键的是,有些资源是腾讯独家的,不装客户端就看不了&…

labview项目实例_labview操作者框架

0.引言操作者框架适合于多并行任务的项目。在这样的项目中,多个并行任务之间往往需要相互通信,传统的解决办法是,每个任务一个队列,一个while循环,多任务项目需要在一个程序框图使用多个while,不好看。NI说…

eclipse发布web不带项目名的url

默认发布后访问地址是&#xff1a; http://localhost:8080/huanle/ 要达到的效果是&#xff1a; http://localhost:8080/ 不带项目名的url的好处是&#xff0c;不用再在每个地址前加<% path%>了&#xff1a; &#xff08;很烦有木有&#xff09; 操作方法&#x…

php 随机在文章中添加锚文本_页面SEO优化的锚文本优化概念

SEO优化分为结构优化和页面优化&#xff0c;页面的SEO优化中其中一个重点是锚文本的建设。锚文本的概念就是网站的内部链接&#xff0c;较为常见的就是将文章中的关键词作为锚文本。但在具体建设当中&#xff0c;很多网站对锚文本的处理出现了很多错误。这是因为对锚文本的优化…

eclipse发布web显示异常,清除缓存也无效?

发布的项目突然之间显示就不正常了&#xff0c;清除了n遍缓存&#xff0c;tomcat目录&#xff0c;一点效果都没有&#xff0c;这时候&#xff0c;应该用Dreamweaver检查下页面代码&#xff0c;很可能是你不小心删了点什么。 下面是一个血的教训&#xff0c;浪费了一上午时间&a…

关于NPN和PNP传感器的应用区别(转载)

http://blog.csdn.net/greatwgb/article/details/9120735 PNP与NPN型传感器其实就是利用三极管的饱和和截止&#xff0c;输出两种状态&#xff0c;属于开关型传感器。但输出信号是截然相反的&#xff0c;即高电平和低电平。PNP输出是高电平1&#xff0c;NPN输出的是低电平0。 …