首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在'r+‘中,为什么在*读完一行之后写一个文本文件会使它写在末尾,而不是`f.tell()`位置?

在'r+'模式下,文件指针的位置由读取操作决定。当使用readline()函数读取一行文本后,文件指针会自动移动到该行的末尾。因此,如果紧接着进行写入操作,写入的内容会追加在该行的末尾。

这种行为是由文件对象的内部实现决定的。在'r+'模式下,文件对象会维护一个读取缓冲区,用于提高读取效率。当调用readline()函数时,文件对象会将一行文本读取到缓冲区中,并将文件指针移动到该行的末尾。而写入操作是直接写入文件的,不受读取缓冲区的影响,因此写入的内容会追加在文件末尾。

如果想要在f.tell()位置进行写入操作,可以使用'rb+'模式打开文件,这样文件指针的位置就由f.seek()函数决定了。在使用f.seek()函数将文件指针移动到指定位置后,再进行写入操作,就可以将内容写入到指定位置了。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):提供高可靠、低成本的云端存储服务,适用于图片、音视频、文档等各类文件的存储和管理。详细信息请参考:https://cloud.tencent.com/product/cos
  • 腾讯云云服务器(CVM):提供弹性计算能力,支持按需购买、按量付费,适用于各类应用的部署和运行。详细信息请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):提供多种类型的数据库服务,包括关系型数据库、NoSQL数据库等,满足不同应用场景的需求。详细信息请参考:https://cloud.tencent.com/product/cdb
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

day 8 - 1 文件操作

最常用 #读写时的文件必须和源文件编码一致 #读写的位置是在读完后的最有一个字符后面 #试想在 r+ 模式下 改变读写顺序 #会在文件开头写入 每写入一个字符便会替换一个字符 f = open('e...f = open('e:/py/test.txt',mode='r+',encoding='gbk') f.seek(4) #按照字节定义光标位置 print(f.tell()) f.close()...移动光标读取后三个字 f = open('d:/py/file.txt',mode='r+',encoding='utf-8') f.readline()  #读取一行使光标移动到末尾 f.seek((...f.tell())-9)  #先锁定光标位置 进行移动 print(f.read()) f.close() readable、readline、readlines 与 truncate f = open...()) #每次读一行,即一行一行的读 #print(f.readlines()) #把每一行当做一个元素,添加到 list f.truncate(2) #对源文件截取一段数据用来更改

39330
  • python文件操作及seek偏移详解

    () 保存运行(F5)运行结果为图左下角 出现长度为68  能正确显示“董” test2.txt 和test3.txt的内容均一样,只是不同的编码下存入文件!...从实验可以看出汉字utf8编码下占3个字节,gbk下占2个字节,英文不管在那个编码下都只占1个字节! 二、python文件操作 搞清楚以上问题我们可以通过操作文件来读取内容,以防止是乱码。...清除原有文件内容 创建并打开新文件 a 只(追加) 保留文件内容,将新数据添加到文件末尾 创建并打开新文件 r+ 读写 从文件开始处读或重写文件内容 出错 w+ 读写 清除文件内容 创建并打开新文件...())          #读完文件,文件指针位置89 f.seek(0,0)              #偏移回文件头 print(f.readline())      #打印出文件中一行(第一行)...      #再打印一行(应该少2个字节) print(f.tell())          #显示 现在 的指针位置 f.seek(-7,1)             #从当前位置向前偏移2个字节 print

    1.2K10

    python字符编码-文件操作

    f.close() # 关闭文件对象解除占用,一般打开了文件都要记得关闭 f.tell() # 返回当前光标文件位置(第几字节,read等方法会将光标后移) # 光标:很多操作(读写)都会改变光标的位置...给offset参数一个定义,表示要从哪个位置开始偏移; # 0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。...注意点:在打开文件的时候,文件必须事先存在,如果文件不存在,直接报错 读完一次之后,文件的光标已经文件末尾了,再读就没有内容可读了...原理也是光标移动,到末尾就读不出来了 可以代替 f.read() 优化,节省内存空间,可以解决大文件一次性读取的问题 readlines():返回的是一个列表,列表一个个元素对应的是文件的一行行内容...,覆盖到后面的字节,导至汉字的三个字节被占掉一个关系对照表找不到对应的内容就乱码了 # 你追h�� # 你追到我 # 我就让你嘿嘿嘿 修改文件内容(两种方式及一个错误案例

    93430

    Python文件读写w+和r+区别解析

    其实是由于读写机制的问题,当一个文件被读或者一次后,文件类指针的东西指向的是整个文件的末尾,再次读时从末尾开始读的话肯定是什么都 读不到了,所以会出现这样的问题,和连续f.read()两次的话,第二次什么都不会读到的原因是相同的...配合f.tell()使用,英文及字符返回的是那个类指针的位置(也就是字符个数),但是中文的话是字符 个数*3,具体原因还得请大侠给讲讲。...r+:先读后的话是原有文本后添加, 因为读完后类指针已经末尾了,如果是先写后读的话,是从头开始覆盖式(如只修改了前面的字符,后面字符是不会被删掉的),类指针停留在写完的末尾不是文档末尾,可以读出未被覆盖写的部分...; w+:为先写后读,先写完后使用f.seek(0)回到初始位置然后开始读,如果先读的话是读不出任何东西的,因为w+也是纯粹的覆盖写,未使用操作前文档是完全空白的,无论之前该文件里有什么。...r和w的区别,r必须已经存在这个文件了 w时文件可以有也可以没有,if有被覆盖,else没有则创建一个(慎用),r+也是覆盖的! 以上就是本文的全部内容,希望对大家的学习有所帮助。

    86910

    python文件处理

    这时候可以逐行获取数据~ # 使用 readline() 仅读取文本的一行内容,光标从文件的开头移动到一行末尾(只读一行,遇到\r 或者 \n 为止),然后读物第二行 with open(file =...文件每一行内容为列表的一个元素~ with open(file = '/Users/luyi/tmp/def.txt', mode = 'r', encoding='utf-8') as f:...方法貌似已经失效 在对文件操作的过程,光标会不断移动,例如readline()方法读取一行信息后,光标会移动至当前行的末尾,writeline()光标也会移动至当前行末尾(写过程貌似光标一直末尾)...', encoding='utf-8') as f: f.seek(5) print(f.readline()) print(f.tell()) # 输出当前光标位置...表示要从哪个位置开始偏移;0 代表从文件开头开始偏移,1 代表从当前位置开始偏移,2 代表从文件末尾开始偏移。 .................^_^

    66920

    python3–文件操作

    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。...总结如下图: 模式 r r+ w w+ a a+ 读 X X X X X X X X X 创建 X X X X 覆盖 X X 指针开始 X X X X 指针结尾 X...X file 对象使用 open 函数来创建: 参数1: 文件名:(如果要是直接写在脚本内最好是文件的绝对路劲) 参数2: option: r 读 w b二进制 a追加 为了配合下面的操作...file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 不是被动的等待输出缓冲区写入。...给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。 该函数没有返回值。

    1.1K100

    python中文件的读取与写入以及os模

    -write only -文件不存在的时候,会自动创建新的文件 -文件存在的时候,会清空文件内容并写入新的内容 a(追加): -write only -:不会清空文件的内容,会在文件末尾追加 -:...文件不存在,不会报错,会创建新的文件并写入内容 r+ -r/w -文件不存在,报错 -默认情况下,从文件指针所在位置开始写入 w+ -r/w -文件不存在,不报错 -会清空文件内容 a+ -r/w -文件不存在...,不报错 -不会清空文件,末尾追加 f = open('/tmp/westos3','w+') /tmp/westos3文件不存在,自动创建了文件并写入了信息...f = open('/tmp/redhat','a+') 不会清空文件,末尾追加 print(f) 文件指针的位置开始为...: 0:移动指针到文件开头 1:当前位置 2:移动指针到末尾 ?

    1.1K10

    Python基础知识4:文件操作

    "hello")#末尾覆盖 f.close() 执行结果: 另外还有a+(实现读和,但的时候会永远在最后追加),w+(实现和读,但会清空源文件内容后),因此用的最多的是r+ 2、关于文件的操作...seek()#将按字节形式读取指针位置,中文代表3个字节 tell()#获取当前指针的位置,按字节形式 案例6:调整指针位置 f=open('db','r+',encoding='utf-8')#即可读又可写...f.seek(f.tell())#可调整当前指针的位置 f.write("888") f.close() 案例7:flush#强刷,当没有结束程序时,需要把的内容强制刷进内存 f=open('db'...,'a') f.write("123") f.flush()#强制把123内容写入硬盘 input("hhh") 案例8:truncate,用来截断数据 f=open('db','r+',encoding...('db2','w')asf2: times= forlineinf1:#一行一行的读取 times+=1 iftimes f2.write(line) else: break 案例10:修改一个文件,

    52060

    Python 学习入门(12)—— 文件

    如文件存在,则清空该文件,再写入新内容 a 以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建 r+ 以读写方式打开文件,可对文件进行读和操作。...b 以二进制模式打开文件,不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。...f.writelines(list) 把list的字符串一行一行地写入文件,是连续写入文件,没有换行。...#文件是否是一个终端设备文件(unix系统的) fp.tell()                                         #返回文件操作标记的当前位置,以文件的开头为原点 fp.next...需要注意,如果文件以a或a+的模式打开,每次进行操作时,文件操作标记会自动返回到文件末尾

    48730

    Python文件

    ,表示已经存在,那么这里模式还是helloworld文件里,那么原来的内容则被现在的文件内容替换,并不会在原来的内容下面接着。...,第一个f.readline()就是读文件的第一行,所以就输出Hello World,第二个就是读第二行,以此类推下去,我们又写了一行“----------------”,但结果是追加在了最后,不是第三行后面...,是因为 r+ 模式就是的内容追加在最后,就这么规定的没办法。....\n") f.write("wll\n") f.write("ly\n") print(f.tell()) #tell()字符的计数 f.seek(5) # 光标指到第五个字符这里,其实也不好使,没有办法指定的光标这里...,只能写后面 print(f.readline()) #读一行的第五个字符后面的内容,readline只读一行 f.write("jiang\n") #这里的内容只能写在最后 f.close()

    43020

    Python文件读写操作

    一、文件打开与关闭方法 python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。...也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 此外,还有很多其他模式:rb,wb,ab,r+,w+,a+,rb+,wb+,ab+,不一一介绍了。...,那么可以不用打开的模式,即只 open('file_b.txt') 如果读了多次,那么后面读取的数据是从上次读完后的位置开始的。...三、按行读取文件 1.按行读取所有数据(readlines) readlines可以按照行的方式把整个文件的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为列表的一个元素。...:读取位置(0:表示文件开头,1:表示当前位置,2:表示文件末尾) with open('file_b.txt', 'r') as f: position = f.tell() print

    57430

    Python3之文件操作file

    文件file 什么是文件: 文件是用于数据存储的单位 文件通常用来长期存储数据 文件的数据是以字节为单位进行存储的 文件的操作流程: 打开文件 读/文件 关闭文件 注意:任何操作系统,一个应用程序同时打开文件的数量有最大数限制...,如果有原文件则追加到文件末尾 ‘b’ 用二进制模式打开 ‘t’ 文本文件模式打开 (默认) ‘+’ 为更新内容打开一个磁盘文件 (可读可写) - 默认是’rt’ - ‘w+b’ 可以实现二进制随机读写...F.read(size=-1) 从一个文件流中最多读取size个字符(文本文件)或字节(二进制文件),如果不给出参数,则默认读取文件全部的内容并返回 F.write(text) 一个字符串到文件流...,返回写入的字符数(文本文件)或字节数(二进制文件) F.tell() 返回当前文件流读写指针的绝对位置(字节为单位) F.seek(offset, whence=0) 改变数据流读写指针的位置,返回新的绝对位置...,不是布尔类型 以二进制的形式写入文件 f = open('newfile.txt', 'wb') # 使用 wb L = [b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\

    87610

    Python之文件操作

    绝对路径是文件直接存储计算机的硬盘里,比如直接存储C盘里、D盘里或是E盘里; 相对路径是文件没有直接存储计算机的硬盘里,比如存储C盘里的一个文件夹中等。...,将文件的每一行作为列表的每一项返回一个列表 content = f.readlines() print('readlines : ',content) 5.读:最常用    for循环 f = open...f.tell() 告诉你光标的位置 print(f.tell()) content = f.read() print(content) f.tell() f.readable() # 是否刻度 line...= f.readline() # 一行一行的读 line = f.readlines() # 每一行当成列表一个元素,添加到list f.truncate(4) for line in f:...所以最好读写不要在一起 #r+ 打开文件直接读完再写 # 编码方式 —— utf-8 # 操作文件 # 读

    721120

    手撕Python之文件操作

    #我们先将文件位置进行复制 #"C:\Users\27890\Desktop\demo.txt" #1.打开文件----open(文件路径) #打开文件之后会返回一个文件对象,那么我们就需要一个变量进行保存的操作...#我们demo.txt文件添加中文通过这种方法进行读取的话就会报错,这是为什么呢?...demo.txt文件 ''' #我们第二次读取的时候并没有从头开始 #而是从上一次读完的下一个位置开始的 readline():一次读取一行数据 将文件的每一行进行读取 with open("demo.txt...查看文件光标的位置--tell() f.tell() with open("demo1.txt",mode='r+',encoding='utf-8') as f: f.write('\n凯子坚持...的话,我们光标打开位置是0 如果我们进行数据的写入的操作话,我们是会将原先的数据进行覆盖的,不是原有的数据后面进行追加的 r+是不能一上来就进行 对于w+的话,尽量少用,一般用于创建文件,用于可读可写的操作

    8810

    day 08 文件操作

    光标末尾 print("c2", c2) 如果你打开的文档不是py里面建立的,直接打开文档的路径,但是要注意的是,这个文档编码的格式是"gbk" f = open("E:\西游记\金角大王吧.txt...for line in f:   每次读取一行内容       文件句柄是一个可迭代对象       #优点:相对节省内存 for line in f:    ####从文件读取到每一行给前面的line...f.read() # not readable f.flush() f.close() r+ :  读写操作   对于文件而言.应该有的操作就是两个: 读, 不论读取内容的多少,只要你读了,写就是末尾...写就是末尾 f.write('五娃') f.flush() f.close() print(f) w+ : 读操作  ,一上来就会清空文件,很少人用 一上来会清空文件....=>", s)  移动光标    f.seek(0) 移动到开头 a+ :   追加写读 ,光标末尾.所有的都是末尾 # 追加写读, 光标末尾.

    47910

    Python 之文件读写操作

    如果文件存在,则清空文件内容,写入内容。             ...a    以追加模式打开文件(一打开文件,文件指针自动移动到文件末尾),如果文件不存在则创建             r+    以读方式打开文件,可对文件执行读去和写入的操作             ...w+    消除文件内容,然后以读写方式打开文件             a+    以读写方式打开文件,并把文件指针移到文件末尾             b    以二进制模式打开文件,不是文本模式...            f.tell()    获取文件指针位置             f.writelines(list)    把list的字符串一行一行的写入文件,是连续写入,没有换行             ...3、文件

    94530

    python3-文件的修改——实现类似s

    【可读;   不存在则创建;存在则只追加内容;】 注意最后要记得关闭文件:f.close() python只能将字符串写入到文本文件。...要将数值数据存储到文本本件,必须先试用函数str()将其转换为字符串格式。...index == 2:        print('-----测试线----',line)        continue    print(line) #比较高效的,逐行读取文件内容,因为它是一行一行的去读取文件...()) print(f.readline()) print(f.tell()) #回到最开始的位置(也可以指定一个位置,前提是你得知道你去往的字符具体在哪个位置才行) f.seek(0) #显示文件的编码...()) #把缓存的内容刷新到硬盘(进度条那个脚本里有一个示例) f.flush() #指定文件从哪里开始截断,如果没有参数,默认从0开始等于清空了这个文件 #f.truncate() #r+ 模式(

    49120

    python基础-文件操作(10)

    不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”,可见,把数据存储起来有做么大的价值...打开word软件,新建一个word文件 写入个人简历信息 保存文件 关闭word软件 同样,操作文件的整体过程与使用word编写一份简历的过程是很相似的 打开文件,或者新建立一个文件 读/数据 关闭文件...也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。...,那么可以不用打开的模式,即只open(“testFile.txt”) 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的 3、读数据readlines() 就像read没有参数时一样,...readlines可以按照行的方式把整个文件的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

    40730
    领券