理解文件中的读取或者写入顺序要先知道对文件进行读写时它的工作模式:在python中对文件进行读写时,是依据文件中光标的位置进行读写的。
这里就要引入seek()方法:
seek(offset, whence)
offset – 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。(定义参考菜鸟教程)
这是什么意思呢?
例子:

with open('abc.txt', 'r', encoding = 'utf-8') as fdata = f.readline()print(data)

当我们用‘r’模式打开文件时,文件中的光标默认在第一个字符(注意是第一个字符,而不是第一行字符),当我们读取文件中的字符时,它是按照光标的位置进行读取的,对于
data = f.readline() 来说就是当光标走到第一行字符的换行符时就停止了,并返回光标走过的字符串,在txt文件内每一行字符的末尾会有一个隐藏的换行符’\n’。
此时我们对f使用seek()方法:f.seek(), 就可以改变文件内光标的位置了,以达到输出我们需要的字符的目的。
用我的理解来说seek(offset, whence)方法:
第一个参数就是把光标移动到当前的第几个字节(注意是字节,不是字符):
第二个参数就是从哪里开始(就是第一个参数解释的当前):
0代表从文件开头开始算起。
1代表从当前位置开始算起。
2代表从文件末尾算起。
例如:
f.seek(3,0):就是把光标移动到文件的开头的第三个字节处。
f.seek(5,1):就是把光标移动到文件当前位置的第五个字节处。
f.seek(7,2):就是把光标移动到文件末尾的第七个字节处。
但是要注意不同的编码它的每一个字符占有的字节数是不一样的,
对于utf-8编码来说一个汉字占3个字节。

现在来说说对于不同的打开方式,文件光标所处的不同位置:

r:只进行读的操作,需要文件存在,进行读操作时,文件的光标在开头的第一个字节。

r+:即可读也可以写,需要文件存在。文件光标在开头的第一个字节,这里分为两种情况:
第一种:先写后读:
由于文件的光标处于开头第一个字节,这就导致了原文件中光标的位置存在字符,则会被新写入的字符覆盖,即光标所到的位置如有字符则会被新字符覆盖,若光标所在的位置无字符,则写入新的字符。这里又产生了两种情况:
第一种:若此时光标走到文件末尾,若此时进行读的操作会发现什么都读不出,因为光标已经走到文件末尾了,没有字符可以被读出来。
第二种:若此时光标不在文件末尾,则会输出后续的字符。
在这两种情况下,若你想读出此前写入的字符你便可以用f.seek(x,x)的方法移动光标。
第二种:先读后写:
与上诉类似,光标开始处于开头第一个字节处,读的时候顺着光标的移动读出字符,若走到文件末尾进行写则不会对原有字符进行覆盖,而是追加。若是光标所在位置有字符时,进行写入则是覆盖光标所在的字符。
总结:'r’或者‘r+’模式下,文件的光标处于开头第一个字节处。

‘w’:只对文件进行全覆盖写入,若文件不存在,则会新建一个文件,文件光标处于文件开头。

‘w+’:可读可写(全覆盖),若文件不存在,则会新建一个文件,文件光标处于文件开头。这里也分为两种情况:
第一种:先读后写:由于是’w+'方式打开文件,文件内容被清除,所以什么都读不出。
第二种:先写后读:写入的字符会沿着光标为移动写入文件,写完后读会发现什么都读不出,因为此时光标处于末尾且光标指向的位置并无字符,此时可以f.seek()把光标移动到要读取的位置进行读操作。
总结:在’w’,'w+'模式下当我们open()时,原文件内容会被清除,开始时光标处于开头第一个字节处。

‘a’:对文件进行追加,若文件不存在会新建文件,文件光标位于文件末尾。
’a+‘:可读可写,若文件不存在则会新建文件,文件光标处于文件末尾。分为两种情况:
第一种:先读后写:
由于文件光标处于末尾,所以什么都读不出,此时可以f.seek(),移动光标到读取位置,读完后若要进行写入操作,不管光标处有无字符,光标都会自动移动到末尾处进行追加,若此时又要读取,则在用一次f.seek()。
第二种:先写后读:
由于文件光标处于末尾,所以写入时进行追加,此时要读取,则在用f.seek()。
总结:‘a’, 'a+'模式下文件光标处于文件末尾,只要写入光标便会自动回到末尾,即只会追加。

可以自己用简单的代码尝试一下,实践出真知嘛,这样印象才会深啊。
第一次写这么多,有错误之处劳烦指出,每天进步一点点。

python文件读写原理的一些理解:r,r+,w,w+,a,a+,以及seek()方法相关推荐

  1. python文件读写用到的库_Python使用pyshp库读取shapefile信息的方法

    通过pyshp库,可以读写shapefile文件,查询相关信息,github地址为 import shapefile # 使用pyshp库 file = shapefile.reader(" ...

  2. python文件读写_python基础-文件读写'r' 和 'rb'区别

    一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据, ...

  3. python文件读取模式_day-2 python 文件读写模式r,r+,w,w+,a,a+的区别

    r+和w+都是可读可写,区别在于r+读文件时,不会覆盖之前的内容,之前的内容能够读出来:w+读时,会覆盖之前的内容:所以读文件时,用r或者r+ #读操作 r 1 filepath = 'aa.log' ...

  4. python 文件读写with open模式r,r+ w,w+ a,a+区别详解

    python 文件读写with open模式r,r+ w,w+ a,a+区别详解 python中的 with open主要要来进行文件读写的操作 在 Python 中使用文件的关键函数是 open() ...

  5. 肝!超好懂的 Python 文件读写教程!

    (扫码关注) 作者:黄伟呢 源自:数据分析与统计学之美 1.文件读写的流程 1)类比windows中手动操作txt文档,说明python中如何操作txt文件? ① windows中手动操作txt文件的 ...

  6. seek是python文件操作方法吗,seek引发的python文件读写的问题

    我的需求很简单,就是统计一下我的安装脚本执行的次数和时间,格式是这样的 install_times:1|install_times:2018-09-03 15:58:46 install_times: ...

  7. python异步读写文件_一文彻底搞懂python文件读写

    Python文件读写 一,I/O操作 I/O在计算机中是指Input/Output,也就是Stream(流)的输入和输出.这里的输入和输出是相对于内存来说的,Input Stream(输入流)是指数据 ...

  8. 一文搞懂Python文件读写

    在使用python编程时,经常会遇到读写文件的操作. 很多童鞋困扰于读写文件的各种模式(如阅读.写入.追加等),以及搞不清open.read.readline.readlines.write等方法的使 ...

  9. 最好懂的python文件读写(详解)

    目录   1.文件读写的流程   2.文件读写的几种常见模式(你不清楚的知识点)   3.read.readline.readlines的区别   4.对于一个10G的大文件,怎么高效的查看文件中的内 ...

最新文章

  1. 张量解释——深度学习的数据结构
  2. 还需要“注意力层”吗?一堆“前馈层”在ImageNet上表现得出奇得好
  3. python库整理: Collections.Counter
  4. 内存映射文件进行写文件和读文件有啥不同_Linux中的mmap映射 [二]
  5. Python--第2次平时作业
  6. Codeforces Round #676 (Div. 2) E待补
  7. 二叉搜索树(BST树)的简单实现
  8. python字典数据类型笔记_python笔记2-数据类型:元组、字典常用操作
  9. SpringBoot 接口快速开发神器(接口可视化界面实现)
  10. 电子工程 计算机科学,计算机科学、计算机工程和电子工程有啥区别
  11. TCP通过带外数据实现心跳检测机制
  12. [Python] 关键字 assert
  13. python小游戏之圣诞树
  14. android dbm模式判断,手机信号强弱判断即【dBm/asu】知识普及
  15. Jquery写的幸运大转盘抽奖实例,用asp.net处理的服务器逻辑,附源码下载
  16. 粗糙集,邻域粗糙集与实域粗糙集概述
  17. Edge浏览器自动翻译按钮不见?
  18. 【SpringCloud】微服务笔记
  19. MySQL - 建库、建表、查询
  20. JavaScript之Three.js

热门文章

  1. JavaScript基础知识梳理
  2. Unity鼠标拖动物体、按下鼠标左键旋转观察物体、鼠标滚轮缩放视野
  3. 如何在 DAX 计算中隐藏未来日期?
  4. jdk1.7升级jdk1.8
  5. SQL Server:偏移量为 0x0000000009c000 的位置执行 读取 期间,操作系统已经向 SQL Server 返回了错误 21的解决方法
  6. plsql-数据查询(二、条件查询)
  7. 群辉Docker删除应用日志
  8. Angular常用ng指令详解
  9. mac怎么设置桌面提醒|mac系统提醒事项设置闹钟方法
  10. 乌班图五子棋c语言,毕业设计(论文)-网络五子棋设计与实现.doc