我们知道,在使用Python打开一个文件时,一般使用的是open()函数,但是你真正了解这个函数么?文件打开后如何进行缓存?对于大文件它是如何处理的?今天,小编带你来详细了解一下……
Python如何读写文件
open函数的使用
当我们使用Python打开一个文件时,一般要用到open()函数,但是,作为初学者,你真正了解这个函数吗?下面,我们来看一下它的用法。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file:打开文件名称和路径。
mode:是一个可选字符串,指定文件打开模式,可用的模式有以下几种。
open()函数中mode模式值
模式默认为‘rt’(打开并读取文件),对于二进制文件可以使用‘rb’、‘wb’打开、读取。‘x’模式针对新创建文件的情形,如果文件已经存在,则抛出FileExistsError异常。‘U’模式已经在Python3.X中弃用了。
buffering:用于设置缓冲策略的可选整数,缓冲策略包括以下几种类型
0:表示关闭缓冲(仅在二进制模式下允许)1:选择行缓冲(仅在文本模式下可用),类似命令提示符操作,当按下回车键后,缓冲结束,将回车符前面的内容交给系统进行处理后返回结果。>1的整数:表示将缓冲区设置为该整数大小。没有参数给定时,执行如下策略:二进制文件的缓冲区大小取决于系统底层设备和操作系统类型,一般情况下为4096或者8192字节长;交互式文本文件(isatty()返回True的文件)使用线路缓冲。其它文本文件使用二进制文件的策略。encoding:用于解码或者编码,只能在文本模式下使用,默认编码是依赖于系统平台的。可以使用Python提供的chardet来测试编码类型。
errors:可选择参数,指定编码错误如何被处理,该参数不可以在二进制模式下使用,可选值有下面几种:
strict:出现编码错误时引发ValueError异常ignore:忽略编码错误newline、closefd、opener三个参数不常用,这里就不再赘述了,想了解他们的内容搜索相关文档。
函数文档是基础,必须掌握哦
open()函数读、写文件及缓冲处理机制
我们知道,open()函数是Python提供的内置方法,对于读写文件,其功能很多,基本不需要我们对其进行覆写就能轻松满足日常需求了。它是如何读取和写入文件的呢?我们来详细探讨一下。
如何交换数据
读文件
它为我们提供了一个类似指针的东西,我们暂且称为文件指针,主要有这几个方法来实现。
首先,只读模式打开一个文件
f = open('test.txt', 'r')
文件指针当前位置
f.tell()
>>>0
将文件指针移动到最后
f.seek(0, 2)
>>>8194
f.tell()
>>>8194
可以将文件指针移动到文件内的任意位置,将文件位置移动到起始点后执行,读取前10个字节内容
f.read(10)
>>>‘psZUkBYZTc’
写文件
对于写文件操作,我们来看下面的例子
打开文件,模式设置为写入,设置buffering=1(行缓冲模式),其余默认
f = open('test.txt', 'w', buffering=1)
f.write('Hello World')
此时,我们看当前目录,已经生成了test.txt文件。但是,该文件大小为0。那么,问题来了,Hello World去哪了?对,在缓冲区中,怎么把它写入磁盘呢?
两种方式:
1.使用f.write('\n')行缓冲模式下将换行符前的内容写入到磁盘中
2.使用f.flush()强制将缓冲区内容写入磁盘
最后,别忘了关闭文件对象f.close()
上面的例子我们知道了其缓冲机制,对于默认情况(视操作系统及硬件配置决定),当写入到缓冲区内的数据大于缓冲区大小时,数据自动写入磁盘。对于自定义缓冲区大小的情况(为buffering指定大于1的整数值),待写入数据大于指定的缓冲区大小时,自动写入(我实验时不是很理想,有时候写不进去,不知道什么原因)。
一般在读写文件时,推荐使用系统默认值(除非必须要更改)。但是你不需要担心数据写不到磁盘中,因为随时可以调用fObj.flush()将缓冲区内的数据写入。
一个例子
下面,举个例子来熟悉下今天的内容。假设我们不知道系统缓冲区到底有多大,我们能否利用程序来看下缓冲区中到底能写入多少数据呢?
思路
我们知道,在文件写入内容之前,使用fObj = open(filename, 'w')函数创建文件对象fObj,这一句执行后在本机会生成filename的文件,大小为0。当我们调用fObj文件对象的write()方法向其中写入数据时,除非使用flush()、close()进行处理,否则,这些数据是不会写入磁盘中的。当然,还有一个办法就是将缓冲区使用数据填充满,此时,数据自动写入磁盘中,而且该文件大小也会发生改变。这时候,我们可以记录写入数据的大小,就是我们缓冲区的大小。
程序实现
程序源代码如下所示。
程序获得缓冲区大小
我们来看下运行效果:
>>>系统缓冲区内能放入的字节数为:8194
也就是说当我们使用open(filename, 'w'&‘a’)往文件对象中写入数据,当写入8194个字节的数据时,会将缓冲区内的数据写入到磁盘中。
怎么样?对于Python文件处理你掌握了吗?喜欢的朋友加个关注,大家有没有更好的文件读写案例,下方留言哦,一起学习进步……后续会推出更加精彩的内容,喜欢Python编程的朋友们加关注了解。
别走开,后续内容更精彩哦
转载请注明出处,百家号:Python高手养成
python读取数据的函数详解_你了解文件缓存机制吗?磁盘文件如何读写?Python中open函数详解...