一,为什么需要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([[]]) #写入多个列表