python文件读写 - 文件r+ open读写实际表现

先说结论:

文件r+ open:

  1. write()不能实现插入写,它总是覆盖写或附加写;

  2. 如果文件一打开即write(),则从开头覆盖写;

  3. 如果文件一打开,用f.seek()指定文件指针位置,然后执行f.write()则从指针位置写(覆盖写);

  4. 如文件打开后先执行了readline(), 然后再执行write(),实现的是附加写

文件a+ open:

  1. 文件打开后起始指针为文件末尾,readline()将读不到数据

  2. write()始终是附加写 ,即使将文件指针指到中间再执行write()仍然附加写

共性:

  1. write()是先写内存,f.close()时才将物理写入

  2. f.tell()函数把‘\n‘换行符当成一个字符而不是两个,计算偏移量时会是1不会是2

测试过程:

文件companies.txt内容:

google
tencent
alibaba
baidu

r+模式:

# python version: 3.6.3>>> f = open(r‘python/file/companies.txt‘,‘r+‘)
>>> f.tell()  #查看文件指针值
0
>>> f.readline() #读一行
‘google\n‘
>>> f.tell() #再次查看文件指针值
7
>>> f.write(‘xxx‘) #在文件指针位置为7时,尝试写入字符串‘xxx‘
3
>>> f.tell() #再次查看文件指针值,已经变为文件末尾了
31
>>> f.readline() #再读一行,看下是读到eof还是接着读第二行
‘tencent\n‘
>>> f.readlines() #实际上还是读第二行,并未从文件指针处开始读,而且第二行中也没有之前写入的‘xxx‘,那么‘xxx‘写到哪里去了呢?把剩下的行全部读出来
[‘alibaba\n‘, ‘baidu‘]
>>> f.seek(0,0) #剩余的行也没有发现‘xxx‘。难道是附加在第一行后面吗?通过seek(0,0)把文件指针指到开头
0
>>> f.readlines() #读整个文件
[‘google\n‘, ‘tencent\n‘, ‘alibaba\n‘, ‘baiduxxx‘]
>>> #最初写入的‘xxx‘其实是被附加到了文件末尾。说明用r+打开文件后,先用f.readline()读行,再f.write(‘xxx‘)的方式不能将字符串写入文件指针所在位置;而且,在write后是先写内存,并没有真的写进文件中,这时候readlines()是读不出来的,当执行f.seek()后readlines()才能读出。读出也不代表commit,真正的物理写入是在执行f.close()才发生的
>>> f.seek(0,0) #将文件指针置回开头
0
>>> f.write(‘bbb‘) #文件指针在开头的初始状态下使用write()方法写入字符串
3
>>> f.tell() #查看文件指针位置,经过write()处理后,指针是否又到末尾了呢?
3
>>> f.seek(0,0) #发现这次write()之后,指针并没有指到末尾,而是在文件开头.那么将指针指回0,后续再读整个文件,看写入的效果
0
>>> f.readlines()
[‘bbbgle\n‘, ‘tencent\n‘, ‘alibaba\n‘, ‘baiduxxx‘]
>>> # ‘bbb‘写到了文件开头,且是覆盖写,而不是插入。
>>> import os
>>> print(os.SEEK_SET,os.SEEK_CUR,os.SEEK_END) #文件的起始位置,当前位置,结束位置常量
0 1 2
>>> f.seek(5,os.SEEK_SET) #将文件指针直接指到5
5
>>> f.tell()
5
>>> f.write(‘ttt‘) #再试一次,看看在没有执行readline情况下,调整指针位置后再write()的效果
3
>>> f.tell()
8
>>> f.seek(0,0)
0
>>> f.readlines()
[‘bbbgltttencent\n‘, ‘alibaba\n‘, ‘baiduxxx‘]
>>> #‘ttt‘竟然是从第5位开始写的!说明write()也可以在文件中间实现覆盖写,而不仅仅是在开头覆盖写或文件末尾附加写,但是前提是打开文件后不能readline,而要直接设置指针位置后调用write()
>>> #总结:r+模式下,write()不能实现插入写,它总是覆盖写或附加写。如果文件一打开即write(),则从开头覆盖写;如文件打开后执行了readline(),然后再调用write(),实现的是附加写

a+模式:

>>> f = open(r‘python/file/companies.txt‘,‘a+‘) # a+打开
>>> f.tell() #初始指针位置
28
>>> #初始指针已经指向末尾
>>> f.readline() #读一行, eof,读不到数据
‘‘
>>> f.write(‘aaa‘)  #写数据
3
>>> f.seek(0,0) #指针重置
0
>>> f.readlines() #读所有行
[‘google\n‘, ‘tencent\n‘, ‘alibaba\n‘, ‘baiduaaa‘]
>>> # ‘aaa‘被附加到末尾了。这点和r+打开文件不同,r+打开文件后执行write()是从开头覆盖写
>>> f.seek(5,0) #文件指针从文件起始位置正向偏移5
5
>>> f.tell()
5
>>> f.write(‘bbb‘) #再试试写,看是从位置5开始写还是从末尾附加
3
>>> f.seek(0,0) #重置指针
0
>>> f.readlines() #读所有行
[‘google\n‘, ‘tencent\n‘, ‘alibaba\n‘, ‘baiduaaabbb‘]
>>> #‘bbb‘附加在末尾,说明即使指定了文件指针位置,a+模式下也不会从文件中部写入,始终附加写入
时间: 2024-10-09 09:33:11

python文件读写 - 文件r+ open读写实际表现的相关文章

三:python数据类型和文件操作

一:字符串操作 1.字符串是可以通过下标来进行取值的,但是由于字符串是不可变变量,不能通过下标来修改它的值 username = 'li' username[0] 2.python里面的for循环,每次循环的时候,循环的是循环对象里面的每一个元素 3.len(names)#取变量的长度 4.#!/usr/bin/python #python里面有个这个话,代表在linux下运行的时候,去哪个目录下找python的解释器,在windows上运行不用写 5.# coding:utf-8 # __*_

python基础之文件操作

文件操作有很多种 我们在这里可以大体分一下,文件的操作其实可以分为对文件整体的操作(创建文件,删除文件,重命名文件,获取文件属性)以及对文件内容的操作(修改文件内容) 先来看对文件整体的操作: 我们按照增删查改的顺序进行讲述 1  增 所谓增,即新建. 新建一个文件 f=open('lalal','w+') #如果该文件(lalal)不存在则创建,若存在则打开. 新建一个目录: >>> os.listdir() ['log', 'test1'] >>> os.mkdir

Python档案袋(文件系列操作 )

文件读写基础 简单的读文件: 1 # r 表示只能读 2 #打开文件,得到文件光标对象,文件不存在则报错 3 f=open("ww.txt","r",encoding="utf-8") 4 5 #读取文件内容 6 res=f.read() 7 8 #关闭文件 9 f.close() 10 11 print(res) 读文件补充: 1 # r 表示只能读 2 #打开文件,得到文件光标对象,文件不存在则报错 3 f=open("ww.txt

python 读写文件中 w与wt ; r与rt 的区别

w,r,wt,rt都是python里面文件操作的模式. w是写模式,r是读模式. t是windows平台特有的所谓text mode(文本模式),区别在于会自动识别windows平台的换行符. 类Unix平台的换行符是\n,而windows平台用的是\r\n两个ASCII字符来表示换行,python内部采用的是\n来表示换行符. rt模式下,python在读取文本时会自动把\r\n转换成\n. wt模式下,Python写文件时会用\r\n来表示换行.

Python读写文件

Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt')try:     all_the_text = file_object.read( )finally:     file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法.

从自动生成.h的头文件集合和类声明集合到用python读写文件

最近在用python自动生成c++的类.因为这些类会根据需求不同产生不同的类,所以需要用python自动生成.由于会产生大量的类,而且这些类是变化的.所以如果是在某个.h中要用include来加载这些类,会累死人的.所以用python来生成这些类的头文件引用和类的类名声明 先看例子,再聊python的读写文件的代码 在聊聊我的python代码 ------------------------> 好吧.上面的图就是面临的需求 下面来聊聊从网上找的读写文件的python代码吧.csdn的一个博主写的

python基础之文件读写

python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名,返回的是一个列表:os.listdir("指定路径") 函数用来删除一个文件:os.remove("文件路径") 删除多个目录:os.removedirs(&

[Python 3系列]读写文件

文件路径 文件有两个关键属性:"文件名"和"路径".路径指明了文件在计算机上的位置. 在windows上,路径书写使用倒斜杠作为文件夹之间的分隔符.但在OS X和Linux上,使用正斜杠作为它们的路径分隔符.如果想要程序运行在所有操作系统上,在编写python脚本时,必须处理这两种情况. 如果将单个文件和路径上的文件夹名称的字符串传递给os.path.join()函数,它会返回一个文件路径的字符串,包含正确的路径分隔符. >>> import os

Python读写文件实际操作的五大步骤

Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序. 一.打开文件 Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序.代码如下: f = open("d:\test.txt", "w") 说明: 第一个参数是文件名称,包括路