概述

计算机都是以二进制存储文件的,如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语句都适用

写入文件

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

写入文件主要有两种方法

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

白日依山尽

黄河入海流

欲穷千里目

更上一层楼

移动文件指针

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

python写入二进制文件的库_python之写入二进制文件相关推荐

  1. python创建一个csv文件_python如何写入csv

    在使用python对文件操作的过程中,你肯定碰到过对csv文件的操作,下面就python对csv文件的操作进行详述. CSV(Comma-Separated Values)逗号分隔符,也就是每条记录中 ...

  2. Python 技术篇-利用pyperclip库实现读取写入剪切板,超简单

    直接pip install pyperclip就可以安装了. 用法也是非常的简单,就是 copy() 和 paste(),比 pywin32 不知道简单多少,有兴趣的可以看下,或是对比下: Pytho ...

  3. python调用c++动态库_Python调用C/C++动态链接库的方法

    本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: //hello.h #ifdef E ...

  4. python图形界面编程库_Python支持哪些图形界面的第三方库

    Python支持哪些图形界面的第三方库 发布时间:2020-11-09 10:37:56 来源:亿速云 阅读:58 作者:小新 这篇文章给大家分享的是有关Python支持哪些图形界面的第三方库的内容. ...

  5. python怎样快速下载库_Python如何急速下载第三方库详解

    前言 pip 是一个现代的,通用的 Python 包管理工具 ,是一个安装第三方 库必备的工具,提供了对Python 包的查找.下载.安装.卸载的功能.但是在国内使用有很多因素的限制,一个3.4M的库 ...

  6. python 股票分析常用库_Python数据分析常用库有哪些?Python学习!

    Python为什么受欢迎?因为Python简单.易懂.好用,是一门高级的编程语言;除此之外,Python提供了大量的第三方库,开箱即用,方便.免费,非常适合从事数据分析领域的工作. 大家也都知道,Py ...

  7. python调用matlab工具库_Python第三方常用工具、库、框架等

    Python ImagingLibrary(PIL):它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换.打印和显示.还能进行一些图形效果的处理,如图形的放大.缩小和旋 ...

  8. python怎么导入pandas库_Python之2-Pandas数据导入导出

    Pandas可以读取与存取像CSV\EXCEL\JSON\HTML\SQL数据库等格式的资料,具体如下: 一:从excel中读取数据并另存一张表 #读取excel中的数据 bill=pd.read_e ...

  9. python怎么导入math库_python怎么导入math库?

    Python语言是通过区分类库的方式来划分功能.用户根据自身的需要加载合适的类库,来完成需要的功能.那么如何导入加载类库?下面本篇文章就来给大家以内置类库math为例,介绍加载内置类库的方法,希望对大 ...

最新文章

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer
  2. SAP MM 库存地点权限控制
  3. mysql proxy读写分离实现_使用mysql-proxy实现读写分离
  4. 小程序中,iOS设备获取蓝牙设备的Mac地址
  5. 机器学习结构化学习模型_生产化机器学习模型
  6. 前端学习(2824):数据绑定前的代码编辑器技巧
  7. hdu 1874(Dijkstra + Floyd)
  8. moodle3.7中文语言包
  9. python怎么抓取网页倒计时_python实现的简单窗口倒计时界面实例
  10. CS224N刷题——Assignment1.3_word2vec
  11. 苹方字体 for linux,苹果苹方字体/苹方黑体全套完整版下载(ttf版)
  12. 企业邮箱邮件在网页版显示正常在Foxmail 显示不全
  13. git 怎么把以前的账号注销_QQ号被注销了,我的游戏账号怎么办?腾讯只用一句话让玩家没话说...
  14. STM32单片机开发实例 基于STM32单片机的智能行李箱
  15. 巧用网络分析仪的校准
  16. 大一微积分笔记整理_大一高数如何做笔记?
  17. 公众号文章怎么制作?
  18. linux - linux查看磁盘空间/查看文件分区(挂载点)/查看文件大小
  19. Error querying database. Cause: java.lang.NullPointerException .The error occurred while handlin
  20. 《统计学》贾俊平 第一章 导论总结

热门文章

  1. 解决svn:E200030: sqlite[S11]:database disk image is malformed
  2. 今天读了JDK1.8源码,知道了并行迭代器Spliterator
  3. Java学习资料汇总(JavaSE+JavaEE+数据库+框架+笔试题+面试题)
  4. macos brew zookeeper,安装后zookeeper启动失败?
  5. 钱币掉落动画android,mpvue实现小程序签到金币掉落动画(api实现)
  6. 聊聊并发(四)——深入分析ConcurrentHashMap
  7. 闪电shader_【Shader案例】怎样做出自然的闪电
  8. leetcode 141 环形链表 C++
  9. PyChram简单使用教程
  10. 李春雷 | 夜宿棚花村