前段日子看了关于Python文件和流的一些文献,其中最基础的便是python的一个内建函数:open!!!

很简单的一个函数,他的原型是这样的:

open(name,[,mode[,buffering]])

顾名思义,name参数指的就是文件名,mode是模式参数,buffering是控制缓冲参数,后两个为可选参数。open函数会返回一个文件对象。

for example:

>>> f = open('myfile.txt')

这样就可以打开当前目录下的myfilef.txt文件。这里举的例子是相对当前目录的路径,当然文件路径也可以是绝对路径(windows中为C:\,Linux or Unix下则是~/)。

今天我想和大家讲的就是这个函数的参数使用上的问题,当然我只是一个大一学生,一个python菜鸟,我希望热爱python的大神们能为我解疑,我只是和大家分享我的看法,想法,以后每次发表的博客也都一样,我希望能和跟多热爱python的大家多交流,多借鉴,学习,无论是和我一样的菜鸟还是python大神。好了,进入正题,Let's go!

open函数的第一个参数不必说。

第二个参数(mode):常用值有' r ',' w ',' a ',' b ',' + ',分别是读模式,写模式,追加模式,二进制模式,读写模式。其中' b ',' + '能能加到其他模式中,举个例子:比如' rb '读取二进制文件,' r+ '可以进行读写文件。

好了,我要讲的就是open的第三个参数!buffering!

buffering的英文意思是缓冲!(虽然我的英语差到极点

但是每次看到代码中不动的英文单词总喜欢先查一下他的英文意思

)从他的英文含义就可以大概知道他就是控制缓冲的参数。

如果参数为0(或是布尔值的False),I/O就是无缓冲的。

如果参数为1(或是布尔值的True),I/O就是有缓冲的。

如果参数为大于1的数字,则此值代表缓冲区的大小(单位是字节);如果为-1或是任何负数,则表示使用默认的缓冲区大小。

这样理解完,似乎很简单,不就是当参数为0或False时输入输出无缓冲,否则就有缓冲,而且大于1的数表示缓冲区大小,负数则使用默认缓冲区大小吗。

for example:

现在我的当前目录下有个myfile.txt文件。进入python交互式:

>>> f = open( ' myfile.txt ' , ' w ' , 0 ) #这时进入无缓冲的写模式

>>> f.write( ' I love python! ' ) #这时在另一个终端用cat查看下文件内容,就可以查看到 I love python!

>>> f = open( ' myfile.txt ' , ' w ' , 1 ) #这时进入有缓冲的写模式

>>> f.write( ' I love python! ' ) #这时在另一个终端查看时文件内容为空

>>> f.close() #这时再次查看,就可以看到 I love python!

前面的很好理解,因为后者是有缓冲的嘛,需要close或者flush才能写入磁盘。但是如果参数是第三种情况的话呢,也就是大于一或是一个负数,即自己设置缓冲区大小。以前我一直觉得这不就是有缓冲吗,设置个缓冲区大小嘛,一旦超过缓冲区大小就直接写入磁盘或者报错啥的呗,是不是也有很多人也这么想的呢。

But!前几天一次偶然,我发现并不是这样,然后我在此思考,尝试好几天,网上也似乎没有关于这个问题的解疑解答。但我希望大家知道这个关于open函数的第三个函数的这个情况就好。

for example:

>>> f = open( ' myfile.txt ' , ' w ' , 100) #这时进入有缓冲的,缓冲区大小为100字节的写模式

>>> f.write( ' Life is short , Use Python! ' ) #内容远小于缓冲区大小没错,理论上这时文件内容应该为空,但是现实残酷,我竟然cat到了Life is short,Use    Python!!!

各种尝试,查阅,总结。我认为事实上当你为缓冲区设置大小时,open进入的却是无缓冲模式。

当时我一直使用的是Ubuntu15.10下的python2.7.10。后来我用os下的python2.7.8试了多次,发现却是我以前理解的那样,确实进去了有缓冲的模式,并自己设置了缓冲区大小。用Linux的朋友们自己注意哈!

python中的open函数实例_Python中open函数注意点相关推荐

  1. python format函数实例_python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...

  2. [转载] python enumerate函数 实例_python中使用enumerate函数遍历元素实例

    参考链接: Python enumerate() 这个是python的一个内建函数,看书的时候发现了他,mark一下 当我们既需要遍历索引同时需要遍历元素的时候,可以考虑使用enumerate函数,e ...

  3. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  4. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  5. python 高级使用实例_Python中的高级函数map/reduce使用实例

    怎么用Python写mapreduce,请举例说明,初学者,请1.lambda # 匿名函数# 基本用法 lambda x: x**2 # 第一个参数,然后是表达式# 也可以使用如下(lambda x ...

  6. python中的split函数的用法实例_python中的split()函数的用法

    函数:split() Python中有split()和os.path.split()两个函数,具体作用如下: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(li ...

  7. python函数库分类及实例_Python中Scikit-Learn库的分类方法总览

    译者丨野生大熊猫 https://mp.weixin.qq.com/s/hmNKdM3pA3Mq9vq0TQXgOg 简介 你是一个正在进入机器学习领域的Python程序员吗? 掌握Scikit-Le ...

  8. python中time函数用法_python中time tzset()函数实例用法

    在时间的设置方面,为了能够跟系统时间有更好的区分,我们有时会借用一些函数方法来实现.就拿tzset()来说是设置时间的一种方法,其内在的变量依靠TZ的控制,如果没有设置TZ则以系统时间为准.接下来我们 ...

  9. python中symbols函数用法_Python基础之函数用法实例详解

    本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def, ...

最新文章

  1. 相机居然能存储气味,未来智能家居会是什么样? | CCF C³
  2. centos查看端口命令
  3. 【STM32】定时器相关函数和类型
  4. 斐波那契数列(二)--矩阵优化算法
  5. 【script】python调用剪切板
  6. 幅度调制(AM调制、DSB(双边带)调制、SSB、VSB)
  7. DDL、DML、TCL
  8. 168.Excel表列名称
  9. python机器学习
  10. 【神器】截图+贴图工具 Snipaste
  11. 【学习笔记】常见的激励函数和损失函数
  12. vue activated,deactivated生命周期的使用
  13. java基础——常用类
  14. 电信客户流失数据分析(二)
  15. C++ 实现mystring类型
  16. Android 卡顿优化之 Skipped * frames 掉帧的计算
  17. 自动化攻击背景下的过去、现在与未来
  18. 文件系统(ext2)
  19. 计算机拼歌曲,抖音你这辈子有没有为别人拼过命是什么歌
  20. PowerPC Figure – PPC入门与优化

热门文章

  1. 使用nLite集成驱动教程
  2. 漂亮好用的ASP.NET图表控件 免费的
  3. Servlet 工作原理解析
  4. vimdiff使用总结
  5. 第十一天 • 库塔山植物园
  6. zabbix 4.0.3 use docker-compose deploy
  7. Navicat for Oracle Cannot load OCI DLL
  8. Linux vim 中文显示乱码解决方法
  9. jquery textSlider 文字滚动
  10. 利用autobench测试web服务器极限并发数