一,为什么需要IO操作?

  实际开发中,经常需要从外部存储介质中读取数据,或者将程序产生的数据存储到文件中,实现“持久化存储”。很多软件系统是将数据存储在数据库中,而数据库实际也是基于文件形式存储的

二,文本文件和二进制文件

  文本文件:文本文件存储的是普通“字符”文本,默认为unicode字符集,可以使用记事本程序打开。(注意:像word软件编辑的文档不是文本文件)

  二进制文件:二进制文件把内容用“字节”进行存储,无法用记事本打开

三,常见模块

  io,os,glob,fnmatch,fileinput,filecmp,cvs,pickle和cpickle,xml

四,创建文件对象(open函数,具体语法就不讲了,这里讲讲内存方面的东西)

  1,python中,万物皆对象。open函数会创建文件对象。我们对文件对象的操作,是通过文件流同步到真实的文件中的。

  2,文本文件的写入分为三个步骤,创建文件对象;写入数据;关闭文件对象

    注意:-python解释器是运行在内存中的,而对磁盘中的文件进行同步是需要操作系统来完成的。关闭文件对象可以释放操作系统中被占用的资源

       -write:写入字符串     writelines:将字符串列表写入文件中,不添加换行符

       -当我们写入数据时,首先会将数据写入文件对象的缓冲区中(此时文件中并没有同步)。当调用close()方法时,会先将缓冲区数据写入到文件(也可以直接调用flush()方法),再关闭文件,释放文件对象

  3,中文乱码问题是因为编码和解码所有的标准不一致导致的。

    注意:Windows操作系统默认的编码是GBK,Linux操作系统默认的编码是UTF-8。例如:当我们调用file.write()写入Unidcode字符时,由于python解释器是通过操作系统来写入到文件中的,所以写入文 件时(编码过程)用的是GBK,而一般txt文本显示时(解码过程)采用的是utf-8解码,这时候就会出现乱码

  4,为了确保打开的文件对象正常关闭,一般结合异常机制的finally或者with关键字实现无论何种情况都能关闭打开的文件对象

    -finally

      try:

        .......

      except ...as...:

      finally:

        .....

    -with语句(上下文管理器):with关键字实际上是自动的管理上下文资源,无论什么原因跳出with块,可以代码块执行完毕之后自动还原进入该代码块时的现场,从而都能确保文件的正常关闭

  8, enurmerate()函数(具体用法见百度)

五,文本文件的常见属性和方法(文本文件的常见操作就是 读取和写入)

  1,常见属性

    name,mode,closed

  2,写入操作

    write(str),writelines(s)

  3,读取操作

    read(size),readline(),readlines()

  4,其他操作

    seek(offset [,whence ]),tell(),truncate([size]),flush(),close()

  5,使用迭代器读取文本文件

with  open() as  f :

  for  a  in  f:

    print(a)

六,使用pickle进行序列化和反序列化

  序列化:对象-----硬盘

  反序列化:硬盘-----对象

  

  序列化时:

    pickle.dump(obj,file) # obj就是要被序列化的对象,file指的是存储的文件

    pickle.load(file) # 从file读取数据,反序列化成对象

    注意:反序列化时要注意序列化时的顺序,按什么顺序写入,就按什么顺序读取出来

 七,csv文件的读取和写入

  什么是csv文件?

    csv是逗号分隔符文本格式,常用于数据交换,Excel文件和数据库数据的导入和导出。csv与excel文件的不同如下:

      -值没有类型,所有的值都是字符串

      -不能指定字体颜色等样式

      -不能指定单元格的宽高,不能合并单元格

      -没有多个工作表

      -不能嵌入图像图表

  读取和写入csv文件(使用csv模块):

import csv


#读取csv文件

with open("dd.csv","r") as f:

    a_csv = csv.reader(f) #创建csv读取器

    list(a_csv) 

#写入csv文件

with open("ee.csv","w") as f:

    b_csv = csv.writer(f)   #创建csv写入器

    b_csv.writerow([])  #写入单个列表

    b_csv.writerows([[]])   #写入多个列表