一:dat文件

在我之前的博客中,我介绍了对txt文件操作的一些相关知识,以及如何对其进行读写操作,也介绍了文本文件和二进制文件的一些区别。虽然对txt文件操作已经能够满足储存数据的需求,但txt文件并不能很好的满足一些工作需求,所以这里我引入对dat文件的操作。

首先,就纯文本类型的数据来说,虽然txt文件已经能够满足存储的需求,但是有时候我们需要将一个如字典和集合这样复杂的对象存入文件中。我们知道txt文件写入操作是将字符串写入文件,如果我们尝试将对象作为操作数输入其中那么就会带来报错,比如下面的这段代码及报错:

>>> infile = open(r'C:\Users\Desktop\test.txt','w')

>>> dic = {'1':'a','2':'b'}

>>> infile.write(dic) #将字典dic写入文件

Traceback (most recent call last):

File "", line 1, in

infile.write(dic)

TypeError: write() argument must be str, not dict

或许我们可以将对象强制类型转化为字符串型以后再写入文件,但是这样将完全改变对象的性质。所以为了将对象写入文件,我们在这里介绍序列化对象的相关知识。

二:序列化对象

序列化对象是是将对象转化为字节流的过程,使之便于保存到文件之后读取。在python中,序列化对象的过程可以叫做pickling,而python标准库提供了一个叫做pickle的模块,在序列化对象时需要先导入此模块。既然是对文件进行操作,那么和对txt文件操作一样,我们需要先定义一个文件对象,仍然是用open()函数打开文件,但是打开模式需要注意:

模式

描述

rb

只读二进制文件,如果文件不存在,则将抛出错误

wb

只写二进制文件,如果文件不存在将创建文件;如果文件已存在将清空之前的内容

ab

附加到二进制文件末尾

(1)如果想写入文件,可以按照以下步骤进行:

·导入pickle模块

import pickling

·打开一个二进制文件进行写入

in_file = open(‘file_name.dat’,‘wb’)

·调用pickle模块中的dump方法序列化对象,并写入文件

pickle.dump(object,file) :其中object是欲序列化的变量,file是文件变量

·关闭文件,断开文件和程序的连接

接下来以一段程序为例:

import pickle

infile = open('test.dat','wb') #以wb模式打开文件

dic = {'1':'a','2':'b','2':'3'}

pickle.dump(dic,infile) #序列化对象并写入文件

infile.close()

(2)如果想要从文件读取或解析已经序列化好的对象,可以按照以下步骤进行:

·导入pickle模块

·打开一个二进制文件进行二进制读取

out_file = open(‘test.dat’,‘rb’)

·调用pickle模块中的load方法读取一个文件并解析他

object = pickle.load(file) :其中file是文件对象变量,object将引用文件读取并解析出的一个对象

·关闭文件,断开文件和程序的连接

import pickle

outfile = open('test.dat','rb') #以rb模式打开文件

dic = pickle.load(outfile)

outfile.close()

三:范例

接下来我将以一个简单的学生信息管理程序为范例讲解序列化对象:

import pickle

def main():

choice = int(input('1:存入学生信息数据 2:读取学生信息数据 3:退出'))

while choice!=3:

if choice==1:

load() #存入数据

choice = int(input('1:存入学生信息数据 2:读取学生信息数据 3:退出'))

elif choice==2:

read() #读取数据

choice = int(input('1:存入学生信息数据 2:读取学生信息数据 3:退出'))

def load():

again = 'y'

infile = open('test.dat', 'ab')

while again == 'y':

student = {} #创建一个空的字典

student['ID'] = input('学号:') #以字符串ID为键,以输入内容为值

student['name'] = input('姓名:')

student['address'] = input('地址:')

pickle.dump(student,infile)

again = input('是否继续输入:y/n')

infile.close()

def read():

id = input('请输入欲查找学生id')

outfile = open('test.dat','rb')

end = False #判断是否已经达到test.dat文件末尾

while not end:

try:

student = pickle.load(outfile)

if student['ID'] == id:

print('姓名:',student['name'])

print('地址:',student['address'])

print()

except EOFError: #达到文件末尾

end = True

main()

程序的运行结果截图如下:

python 对象序列化 pickling_[Python]对dat文件的操作:序列化对象相关推荐

  1. Python的学习(十六):对文件的操作

    Python的学习(十六):对文件的操作 编码格式的介绍 Python中的解释器使用的是Unicode(内存) .py文件在磁盘上使用UTF-8存储(外存) 如何修改文件格式?不写的话默认为UTF-8 ...

  2. DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)...

    一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢 ...

  3. 使用python来访问Hadoop HDFS存储实现文件的操作

    在调试环境下,咱们用hadoop提供的shell接口测试增加删除查看,但是不利于复杂的逻辑编程 查看文件内容 www.xiaorui.cc 用python访问hdfs是个很头疼的事情.... 这个是p ...

  4. python学习笔记9.2-文件及文件夹操作

    本文主要介绍python对文件以及文件夹的操作,主要涉及到文件的创建.读取.文件内容的修改.删除,文件夹的索引.目录的判断等等.此节内容非常重要,是以后编程的基础.python文件夹和文件的操作主要借 ...

  5. python基金会主席入门教程_Python基金会-文件IO操作,python,基础

    函数 功能 open 打开文件 read 读取文件 write 写文件 close 关闭文件 readline 行读取 readlines 多行读取 open方法 open方法: 打开一个文件,返回一 ...

  6. python open读取_Python:open的文件读取操作,utf-8,UnicodeDecodeError

    简要目录: open函数 将文件设置为utf-8编码格式 UnicodeDecodeError f.read() 和 f.read(size) f.readline() 和 f.readlines() ...

  7. Java实验9 T6.将对象和数组存储在dat文件中

    题目要求 (将对象和数组存储在文件中) 编写一个程序,向一个名为Exercise19_5.dat的文件中存储一个含5个int值1,2,3,4,5的数组,存储一个表示当前时间的Date对象,存储一个do ...

  8. python文件hadoop_采用Python来访问Hadoop HSFS存储实现文件的操作

    用python访问hdfs是个很头疼的事情. 这个是pyhdfs的库 import pyhdfs fs = pyhdfs.connect("192.168.1.1", 9000) ...

  9. 用python读取dat文件,wifi数据采集工具csi tool数据文件(.dat文件)解析

    项目地址: https://github.com/hongshixian/CSI_reader 前言 数据采集工具csi_tool采集数据并保存为后缀.dat的数据文件,在csi_tool中提供一个c ...

最新文章

  1. HMM 前向 后向 Viterbi算法讲解通透的
  2. [转]Linux文件搜索
  3. MVCWebForm对照学习:传值方式
  4. C# Tips 2------ToolStripSplitButton's 'Checked' property
  5. [Linux运维 -- 数据库]mysql处理时间
  6. 产品经理做产品设计的九步法
  7. 站在巨人的肩膀上——Linux信号量操作
  8. 菜鸟教程html5常用标签,HTML5 Canvas | w3cschool菜鸟教程
  9. 北大医学英语和计算机,医学英语专业本科生张泉同学在SSCI期刊发表论文
  10. 益智休闲手游源码《贪吃蛇大战方块》源码H5+安卓+IOS三端源码
  11. 计算机毕业设计ssm鹊巢大连分公司分销商管理系统51g9m系统+程序+源码+lw+远程部署
  12. 尤克里里 ukulele 单板 非kaka tom uma
  13. 函数模板的特例化(专用化)以及类型含有const的特殊情况
  14. Linux Ubuntu下载
  15. md文档插入gitlab仓库图片
  16. android闹钟哪个好用,谁才是轻便实用好闹钟 Android闹钟类应用横评
  17. 如何下载NBA球员投篮信息
  18. EasyExcel快捷导出
  19. (三).类的小知识点
  20. 分享文件的另一种选择--Firefox Send

热门文章

  1. Java高阶部分知识点汇总(二)-封装与隐藏详讲
  2. MATLAB从入门到精通-最速下降算法、牛顿算法、BFGS拟牛顿算法、共轭梯度算法无约束极值问题
  3. 数据挖掘领域十大经典算法初探
  4. DELL服务器安装过程中出现的ERROR及解决方案
  5. 机器学习算法源码全解析(二)-范数规则化之L0、L1与L2范数
  6. LeetCode-动态规划-198. 打家劫舍
  7. Java多线程编程那些事:volatile解惑--转
  8. netflix feign概述
  9. Impala:新一代开源大数据分析引擎--转载
  10. Spring源码解析之:Spring Security启动细节和工作模式--转载