• open函数参数解析

    • mode 打开模式
    • buffering 缓冲区
      • 什么是缓冲区?
      • 如何查看系统默认缓冲区大小?
      • 为什么默认缓冲区是4K?
      • 测试缓冲区
      • 如何修改缓冲区?
    • encoding 编码格式
    • errors 报错级别 不能用于binary mode
    • newline 设置换行符, 默认为none
      • 不同操作系统换行符不统一
      • 使用newline
    • 文件方法调用
      • read 读文件
      • readline 读一行
      • readlines
      • write 写文件
      • writelines 把可迭代对象写入文件
      • flush
      • tell
      • readable
      • writeable
      • isatty
      • seek
      • fileno

open函数参数解析

  • open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
  • file : 一个包含了你要访问的文件名称的字符串值。

mode 打开模式

决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。默认文件访问模式为只读(r)。

buffering 缓冲区

设置文件缓冲区大小,默认值为系统默认缓冲区大小。open 函数对文件 buffer 的设置是对系统调用的封装,并不是 Python 本身实现的,而是系统 API 中早已提供的

什么是缓冲区?

  • 因为磁盘的IO是很耗时的,设置缓冲区为了减少IO读写次数。例如每次向磁盘写入1kb字符,如果缓冲区大小大于1kb,这个时候不会立刻写入磁盘,而是等缓冲区满了之后再次写入。
  • 如果一次写入内容大于缓冲区大小,则会立即写入。如果不 close,或者不提前用 flush 是不会刷入硬盘的

如何查看系统默认缓冲区大小?

在多数系统里面,默认缓冲区大小为4094(4k),8192(8k)。

import 

为什么默认缓冲区是4K?

操作系统通常系统有一个磁盘最小读写单位,逻辑块(block),linux里面是4k。 e.g: ```shell script sudo /sbin/tune2fs -l /dev/nvme0n1p2 First block: 0 Block size: 4096

### 测试缓冲区
这个例子将缓冲区修改为2,这样每次都会去写磁盘,造成效率低下。
```python
with open("test.txt", "wb+", buffering=2) as f:for num in range(1, 1000000):f.write(b"tn")

如何修改缓冲区?

对于不同参数(-1, 0, 1, > 1),不同类型的文件 (Binary/Text) 还有不同的策略

| File Type | buffering=-1 | buffering=0| buffering=1 | buffering>1 | | ---- | ---- | ---- | ---- | ---- | | Binary | 系统默认的 buffer 大小 | unbuffered | 1| 指定缓冲区大小 | Text | 系统默认的 buffer 大小 | 不允许 | line buffering | 系统默认的 buffer 大小

encoding 编码格式

这个参数应该被用于text模式,默认编码是系统设置。

errors 报错级别 不能用于binary mode

  • strict: 字符编码出现问题时会报错
  • ignore: 字符编码出现问题时程序会忽略而过,继续执行下面的程序

newline 设置换行符, 默认为none

newline 的值可以为 None, '', 'n', 'r', and 'rn'

不同操作系统换行符不统一

  • linux/mac:n
  • windows:rn universal newlines - 系统换行符

使用newline

  • 若文件都是使用python程序进行读写,一般使用默认值即可
  • newline="" 的例子。使用csv模块读写CSV文件时候,需要设置newline='' 参考文档:https://docs.python.org/3.4/library/csv.html?highlight=csv

例子:

# 强制转化成r 写入

输出

['r', 'r', 'r', 'r']
['n', 'n', 'n', 'n']

文件方法调用

read 读文件

默认把整个文件当成一个字符串读出来,可以传入参数设置一次性读出来的字符长度

readline 读一行

一次读一行,以换行符作为分界点,每次调用之后文件指针指向下一行

readlines

默认把整个文件当成一个list读出来,以换行符作为元素分隔,可以传入参数设置一次性读出来的列表长度。需要注意是列表每个元素包涵所有内容,换行符不会被转义。

write 写文件

把一个字符写入文件

writelines 把可迭代对象写入文件

可迭代对象包括字符串,列表,元祖 需要注意是,writelines传入的是一个可迭代对象类型,如果传入一个字符串,会遍历这个字符串每个字符,然后再写入,如果字符串很大,会造成效率极其低下。一个长字符串写入,应该采用write方法

flush

刷新缓冲区,如果缓冲区还没有写满,则可以强制刷新,写入磁盘。

tell

返回当前指针位置

readable

判断当前文件是否可以读,返回bool值

writeable

判断当前文件是否可以写,返回bool值

isatty

判断当前文件是否被打开,并且连接到了一个类终端(TTY)设备。具体用法参考open_function_issatty.py

seek

  • offset 开始的偏移量,也就是代表需要移动偏移的字节数
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

fileno

返回整型的文件描述符.如果IO对象不能使用文件描述符,SError异常被抛出。

文章相关代码:

https://github.com/Danielyan86/study-notes/tree/master/Linux/filesystem​github.com

wps保存的csv文件是什么编码的_Python文件读写详解.md相关推荐

  1. python怎么读写文件-手机上怎么写pythonPython文件读写详解及设置文件的字符编码...

    文件读写操作在各种编程语言中都是比较重要的部分,也是很常用的部分,今天就来详细说一下python对文件的读写操作,以及需要注意的点. 一. python打开文件 代码如下:f = open(" ...

  2. python怎么读文件内容-Python读取文件内容为字符串的方法(多种方法详解)

    以下笔记是我在 xue.cn 学习群之数据分析小组所整理分享的心得.相关背景是:我选择中文词频统计案例作为考察大家python基础功掌握程度. 以小见大,下面是2个小技能的具体实战: 如何灵活地处理文 ...

  3. js php base64,JavaScript实现Base64编码与解码的代码详解

    本篇文章给大家分享的是jJavaScript实现Base64编码与解码的代码详解,内容挺不错的,希望可以帮助到有需要的朋友 一.加密解密方法使用//1.加密 var str = '124中文内容'; ...

  4. nmmqq.php?/lspc.html,html中的图片直接使用base64编码后的字符串代替详解

    网页中的图片是使用base64编码后的字符串代替了,这个叫做Data URI scheme,下面有个不错的示例,大家可以参考下 最近来了一个网页,里面有图片,但是却没有引用外部的图片资源,很好奇.查看 ...

  5. java中的getnumber怎么用_java安全编码指南之:Number操作详解

    简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧. Numb ...

  6. java 置位_java安全编码指南之:Mutability可变性详解

    简介 mutable(可变)和immutable(不可变)对象是我们在java程序编写的过程中经常会使用到的. 可变类型对象就是说,对象在创建之后,其内部的数据可能会被修改.所以它的安全性没有保证. ...

  7. [转载] C++文件读写详解(ofstream,ifstream,fstream)

    [转载] C++文件读写详解(ofstream,ifstream,fstream) 注:转载文章,侵删 来源:C++文件读写详解(ofstream,ifstream,fstream) 作者:CSDN博 ...

  8. python url解码_对python中url参数编码与解码的实例详解

    一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...

  9. linux系统编程笔记02——Linux命令:修改文件权限命令chmod、chgrp、chown详解

    Linux命令:修改文件权限命令chmod.chgrp.chown详解 Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限 ...

最新文章

  1. 计算机专业期末考试是编程序,计算机专业技能期末考试题
  2. RxSwift 之过滤操作
  3. 杭州网络推广带大家了解404页面的作用以及对网站优化的优势
  4. 【ELK】ELK集群搭建(ElasticSearch Logstash Kinaba)
  5. Spring-- ApplicationContext
  6. 2、MapReduce的job提交启动过程
  7. centos7中无法确定光盘权限怎么办_图解KVM安装CentOS7.6操作系统
  8. php unserialize 返回false的解决方法
  9. 中文信息处理(五)—— 文本分类与文本表示
  10. 【073】Android 数据存储(SQLite)
  11. SMP IRQ affinity
  12. 终于找到了。 图标搜索、UI设计、移动开发集中导航
  13. “鬼才”论文致谢刷屏!感谢我导“似导非导”的指导……
  14. Linux的10个经典彩蛋
  15. iOS 开发 入门:使用Ad Hoc 进行用户测试
  16. 统一沟通-技巧-10-Lync-公网证书-Go Daddy-Buy
  17. 语音增强二,麦克风阵列
  18. mescroll源码
  19. Chrome、FireFox浏览器新标签页打开搜索和书签
  20. NFT吸血DeFi,冰火两重天

热门文章

  1. 对于生活服务小公司网站的看法
  2. SQL Server数据库查询速度慢的原因和解决方法
  3. 如何处理Entity Framework中的DbUpdateConcurrencyException异常
  4. Win8.1无法安装更新,提示0x800*****错误的解决方法
  5. appium学习【二】:用try捕获异常后,用例的执行结果为pass
  6. 利用ComponentWillReceiveProps解决异步问题
  7. 解决页面使用overflow: scroll在iOS上滑动卡顿的问题
  8. “另一个程序正在使用此文件,进程无法访问”的解决方法
  9. 获取Moment Js中两个日期之间的小时差异
  10. Python字典理解