小量最近用PySCF计算Hartree-Fock轨道传递给自己的程序使用,为了保证精度和节省硬盘空间,使用二进制文件来传递数据。本文简单小结一下Python的二进制文件的读写。

在Python中实现二进制文件的读写需要导入struct模块,对数据进行打包处理再写入文件。以下直接举一个简短的程序示例:

1   #!/usr/bin/python

2   import struct

3   f = open('test.bin', 'w+b')

4   a0 = 1

5   a1 = 2

6   data = struct.pack('2i', a0, a1)

7   f.write(data)

8   f.seek(0)

9   data2 = f.read()

10   (a, b) = struct.unpack('ii', data2)

11   print a, b

第3行,打开文件时,模式需要添加'b'模式,表示二进制模式。注意,以读写模式打开时,不能写rw,应该写r+或w+模式。

第6行,将数据转化成二进制并进行打包。其通用格式为struct.pack(fmt,v1,v2,...)。由于python中数据不需要声明类型,因此需要在打包时指明数据类型,才能确定数据的字节数。例如本例中2i表示将两个整型数进行打包。各种数据类型所用的符号以及所占的字节数在Python的官方手册中有列表:

第7行,将数据写入文件。

第10行,将读出的数据解包,并根据数据类型转化为普通格式。注意,解包出来的数据会构成一个元组,因此,如果只有一个数据,要写成a,或者(a,)。

笔者遇到一个问题,始终不知道是何原因,如果有小伙伴知道,请留言告知。笔者尝试将一个整数和一个浮点数打包,格式为'id',按理来说,i占4位,d占8位,得到的数据应该是12位,但观察到的是16位。后来笔者又用做了一系列测试,结果如下:

>>> struct.calcsize('id')

16

>>> struct.calcsize('iid')

16

>>> struct.calcsize('iiid')

24

>>> struct.calcsize('iiiid')

24

>>> struct.calcsize('iiiiid')

32

>>> struct.calcsize('iiiiiid')

32

当i的个数为奇数时,始终会多计算4位。不知当中有何玄机。为避免这个问题,建议大家将不同类型的数据分批打包,依次写入文件。例如第一次单独写一个i类型数据,第二次单独写入一个d类型数据,得到的大小就是12。

最后,顺便提一下Fortran中二进制文件的读写。在彭国伦的教材中提到,文件的格式有两种:formatted和unformatted,其实还有第三种格式:binary。如果用Fortran程序读取上述Python代码生成的二进制文件,使用unformatted时,无法正常读出,需要写成binary格式:

program main

implicit none

integer*4 a,b

open(unit=10,file='test.bin',form='binary')

read(10) a,b

write(*,*) a,b

end

注意在Python中是以4位存储的整数,因此在Fortran中要声明4位的整数来读取。

python二进制文件读写文件_Python二进制文件读写相关推荐

  1. python格式化读取文件_python文本读写与格式化

    作为一个IC攻城狮,除了Verilog,还需要使用python等脚本语言做一些简单的文本处理,提高工作效率,这里记录一下自己常用的文本读写,方便查询. 只做简单说明,因为我只用python做一些简单的 ...

  2. python读取docx文件_Python应用 | 读写docx文件 (值得收藏的技能)

    字处理软件是平时办公必备的同时也是最常用的软件之一,而字处理软件用的最多最频繁的就是微软的word,其扩展名为docx.在日常工作中,可能需要对很多的docx文件进行批处理,例如教师在批阅学生提交的电 ...

  3. python读取txt文件_python实现读写txt文件的几种方法

    一.读写模式: w:向文件中写入内容,w会清空原来文本内容 a:向文件中追加内容 r:从文件中读取内容 wb:以二进制形式写入内容. rb:以二进制形式读文件内容 ab:以二进制形式追加内容 a+.r ...

  4. python逐行写入文件_python逐行读写txt文件的实例讲解

    实例如下所示: # -*-coding:utf-8-*- import os file_obj = open("test2.txt") all_lines = file_obj.r ...

  5. python读取写入文件_Python文件读写保存操作

    记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项. 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之 ...

  6. python 多线程读写文件_Python多线程同步---文件读写控制方法

    1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res ...

  7. python实时读取文件_Python 文件读写

    Python 文件读写 读写文件使用内建函数open().write(). read()方法 file = open('a.txt','r') #打开文件'a.txt',返回文件对象file #pri ...

  8. python读取log文件_python文件读写(一)-txt, log, json, csv, xml文件

    1.概述在平时自动化测试工作中,经常会用python对一些文件进行读写操作.其中使用最多的文件格式,就是txt,  log,  json,  csv,  xml,  zip, tar, gz,  ra ...

  9. python 多线程读写文件_python多线程同步之文件读写控制

    本文实例为大家分享了python多线程同步之文件读写控制的具体代码,供大家参考,具体内容如下 1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env pyth ...

  10. python多进程读同一个文件_python 多进程读写文件

    import time from multiprocessing import Process, JoinableQueue, cpu_count import csv ####处理一条数据的方法 d ...

最新文章

  1. 震精!Spring Boot内存泄露,排查竟这么难!
  2. 变量、中文-「译」javascript 的 12 个怪癖(quirks)-by小雨
  3. pyharm虚拟环境_手把手教你如何在Pycharm中加载和使用虚拟环境
  4. python断点续传下载_Python版本,图片,视频断点续传下载
  5. STM32的ADC采样与多通道ADC采样
  6. 信息摘要算法之四:SHA512算法分析与实现
  7. 打造一个属于自己的应用服务自动监控警报程序
  8. QG3系统无法创建SAP employee的原因
  9. 想建一个带分隔条的label 控件;
  10. bash: pcre-config: 未找到命令..._Docker 常用操作命令
  11. 一文看懂5G射频的“黑科技”
  12. 项目class第十四周项目一:动物学叫
  13. php mysql 录入_MYSQL+PHP表单录入数据的问题
  14. 坐标的先对转化clienttoscreen与screentosclient
  15. 鸿蒙系统有安全管家吗,每个人都能拥有的“钢铁侠管家”?华为最新鸿蒙系统了解一下!...
  16. 数据结构与算法书籍汇总(从小白到大神)
  17. 软件著作权申请流程和费用
  18. 腾讯与清华大学物理系签署合作备忘录,探索材料计算新领域
  19. Mac 拓展屏幕时切换软件窗口停留在Mac 显示器中
  20. 计算机win10+上锁,win10系统给电脑屏幕上锁的操作方法

热门文章

  1. 手把手教你用Mysql-Cluster-7.5搭建数据库集群
  2. 一个简易的C++性能分析工具
  3. signal(SIGHUP, SIG_IGN)的含义
  4. Predictably Irractional - 期望的效应
  5. 鼠标移上去切换背景色
  6. 白盒测试之基本路径测试法[3]
  7. 【VS2010学习笔记】【编程实例】 (在Visual Studio中使用C++创建和使用DLL)
  8. 【数码管识别】感兴趣区域提取和缩放的顺序问题
  9. 智能优化算法:动物迁徙优化算法-附代码
  10. python 读取txt中的英文内容 分析词频 可视化显示