python读取数据的函数详解_你了解文件缓存机制吗?磁盘文件如何读写?Python中open函数详解...

本文深入探讨了Python中open()函数的使用,包括文件打开模式、缓冲策略及其对大文件的处理。通过示例解释了读写文件时的文件指针操作,以及如何通过缓冲区大小确定系统默认缓冲策略。最后,通过一个实例展示了如何利用程序检测系统缓冲区大小。
摘要由CSDN通过智能技术生成

我们知道,在使用Python打开一个文件时,一般使用的是open()函数,但是你真正了解这个函数么?文件打开后如何进行缓存?对于大文件它是如何处理的?今天,小编带你来详细了解一下……

b151f8198618367a38b6ce81ec096ed1b31ce534.jpeg?token=aabec981f6bf72c5e7c6d4fc7d9c74a1&s=9512529542E3D74F0C1270DD030050BAPython如何读写文件

open函数的使用

当我们使用Python打开一个文件时,一般要用到open()函数,但是,作为初学者,你真正了解这个函数吗?下面,我们来看一下它的用法。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

file:打开文件名称和路径。

mode:是一个可选字符串,指定文件打开模式,可用的模式有以下几种。

d62a6059252dd42ac95fff10c241beb0c8eab8bc.jpeg?token=18c0f259e79d5d41c92b2a3c87d761fe&s=FFA18B4642F4C5CA1E2B7DFE0200D02Aopen()函数中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三个参数不常用,这里就不再赘述了,想了解他们的内容搜索相关文档。

9d82d158ccbf6c81adf4ce697d44543031fa40f4.jpeg?token=96e40787ad0866762b0e5e319a633521&s=A823CE144B5E564D0EF82757030050FE函数文档是基础,必须掌握哦

open()函数读、写文件及缓冲处理机制

我们知道,open()函数是Python提供的内置方法,对于读写文件,其功能很多,基本不需要我们对其进行覆写就能轻松满足日常需求了。它是如何读取和写入文件的呢?我们来详细探讨一下。

2934349b033b5bb5e87d9b86f4a9303cb700bca4.jpeg?token=c8c4740e3ef2f8d1bd2be8271b40b371&s=B32FF004484237474496D59C030050C9如何交换数据

读文件

它为我们提供了一个类似指针的东西,我们暂且称为文件指针,主要有这几个方法来实现。

首先,只读模式打开一个文件

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()进行处理,否则,这些数据是不会写入磁盘中的。当然,还有一个办法就是将缓冲区使用数据填充满,此时,数据自动写入磁盘中,而且该文件大小也会发生改变。这时候,我们可以记录写入数据的大小,就是我们缓冲区的大小。

程序实现

程序源代码如下所示。

63d0f703918fa0ec8e9353b1e4edbceb3c6ddbb2.jpeg?token=259282eec7e512081d3c36b23206f27d&s=A0C2914A1AE4A36C44F1648D0000E0C2程序获得缓冲区大小

我们来看下运行效果:

>>>系统缓冲区内能放入的字节数为:8194

也就是说当我们使用open(filename, 'w'&‘a’)往文件对象中写入数据,当写入8194个字节的数据时,会将缓冲区内的数据写入到磁盘中。

怎么样?对于Python文件处理你掌握了吗?喜欢的朋友加个关注,大家有没有更好的文件读写案例,下方留言哦,一起学习进步……后续会推出更加精彩的内容,喜欢Python编程的朋友们加关注了解。

cdbf6c81800a19d8b6444df4f280678ea71e4678.jpeg?token=23bfe8ac394fee5b29c8cde872eb2e27&s=2FA46C804B232105727CF001030060CD别走开,后续内容更精彩哦

转载请注明出处,百家号:Python高手养成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值