我们知道,在使用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函数详解...相关推荐

  1. python读数据-如何用 Python 读取数据?

    原标题:如何用 Python 读取数据? 这是林骥的第 36 篇文章 1. 序言 读取数据往往是做数据分析的第一步,本文没有讲那些艰涩难懂的概念,只有一些问题的解决方案,当你遇到类似的问题的时候,可以 ...

  2. python读取数据方法

    python读取数据方法 1.1读取 csv文件.用到pandas库中的read_csv()函数,格式如下: 读取格式: import pandas as pd csv_data= pd.read_c ...

  3. python读取数据的函数详解_python如何从文件读取数据及解析

    python如何从文件读取数据及解析 读取整个文件: 首先创建一个文件,例如我创建了一个t x t文件了. 然后我想读取这个文件了,我首先将上面的这个文件保存在我即将要创建的Python的文件目录下, ...

  4. python读取数据的函数详解_python之文件读写详解

    打开文件 函数open() 参数说明: file:文件路径 mode: 文件的读写方式,默认'r',只读方式: buffering:设置缓冲策略,0用于二进制文件,1为行缓冲,用于文本模式:默认二进制 ...

  5. python读取数据文件夹_使用python依次读取文件中的所有csv格式的数据

    使用python依次读取文件中的所有csv格式的数据: #coding=gbk import pandas as pd import os path = r'D:\ml_datasets\PHM\c6 ...

  6. python打开各种文件格式_使用python读取数据科学最常用的文件格式(转)

    Author:kevinelstri DateTime:2017/3/13 1.什么是文件格式? 文件格式是在文件中存储信息的一种标准方法.首先,文件格式指定文件是一个二进制或ASCII文件.其次,文 ...

  7. python excel 数据匹配实现vlookup功能_如何用python实现excel中的vlookup功能?

    相信大家都知道excel的vlookup函数,也会运用,这是财务审计工作中经常会用到的函数之一,那用python如何实现这一功能呢? 1. 目标介绍 刀哥想将2017年科目余额表中,应收账款明细的所有 ...

  8. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略

    欧阳元东 摘要:Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python ...

  9. python课程丶优达学城_《数据分析入门—优达学城》学习python导入数据并改正数据类型...

    利用python学习数据分析之数据导入 本文为Udacity数据分析入门课程学习笔记,数据源为课程附件资料3个csv表格记录Udacity的学员注册信息,学员每日参与行为数据,项目记录,课程主要目标学 ...

最新文章

  1. 模块的使用,包,及程序开发规范
  2. linux系统结构与文件管理命令
  3. 第1章 统计学习方法概论
  4. POJ1236 Network of Schools
  5. play 连接mysql_Play framework 2.x 连接mysql | 学步园
  6. java值栈_Struts2学习笔记-Value Stack(值栈)和OGNL表达式
  7. 云锁惊艳亮相2016杭州云栖大会
  8. noi linux,NOI Linux使用教程(基础讲解)
  9. 从自走棋代码分析游戏机制--棋池、回蓝、目标判断、掉落概率与新英雄
  10. 软件测试肖sir__006xmind思维导图实战__微信发红包
  11. 【AI with ML】第 7 章 :用于自然语言处理的递归神经网络
  12. 海思平台ISP调试经验
  13. 微信公众号开发(总结)
  14. PPT打印省纸法及改变ppt背景
  15. 2021宿迁所有高中高考成绩查询,宿迁市“赫赫有名”的4所高中,高考成绩说话,不愧是211后援团...
  16. 安卓如何将数据转到iPhone上?
  17. 如何设置文本框内的默认文字?
  18. 解决华为M2 平板前置摄像头录制视频黑屏
  19. 非root用戶配置两机ssh互信
  20. 电路学习实战分析之mos-1

热门文章

  1. c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决
  2. python爬虫解决网页重定向问题
  3. Win10系统下软件UI显示不完整解决方案
  4. 微信支付技术解决方案
  5. 解决mysql“Access denied for user‘root‘@‘IP地址‘“问题
  6. 在shell脚本中没有换行符的#39;echo#39;
  7. 如何在Android Studio中查看方法信息?
  8. jQuery的jquery-1.10.2.min.map触发404(未找到)
  9. 使用Silverlight 2实现水中倒影效果
  10. Postfix邮件服务器搭建之roundcube webmail安装与配置