吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 758|回复: 7
上一主题 下一主题
收起左侧

[求助] python以 w 模式打开的文件,write写入时为什么不覆盖前面的内容?

[复制链接]
跳转到指定楼层
楼主
ntldr 发表于 2024-5-28 18:25 回帖奖励
本帖最后由 ntldr 于 2024-5-28 18:28 编辑

请教各位大神:在本站看孙兴华的python基础教程,在文件和文件夹那一节有段代码,没弄明白:
[Python] 纯文本查看 复制代码
文件对象 = open(r"c:\1.txt",'r',encoding='utf-8')
文件对象新 = open(r"c:\2.txt",'w',encoding='utf-8')

while True:
    读的数据 = 文件对象.read(10)
    if len(读的数据) == 0 :
    break
    文件对象新.write(读的数据)

文件对象.close()
文件对象新.close()


这段代码中,每次循环时,文件对象新.write(读的数据)  ,这句为什么不覆盖前面的内容,而且能把1.txt中的内容完整写到2.txt中。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
boryou 发表于 2024-5-28 20:34
你是先open文件,然后不断往这个文件里写入,而不是每次写入都重新open文件
3#
shadmmd 发表于 2024-5-28 22:02
因为每次write都会移动“文件对象新”的文件指针,直到“文件对象新.close()”才会拒绝“文件对象新”的文件指针移动。你想每次write都覆盖2.txt已有的全部内容,那么就要把“文件对象新.close()”这段放在while循环内。
4#
 楼主| ntldr 发表于 2024-5-28 22:07 |楼主
boryou 发表于 2024-5-28 20:34
你是先open文件,然后不断往这个文件里写入,而不是每次写入都重新open文件

多谢,多谢,想了好久。
5#
 楼主| ntldr 发表于 2024-5-28 22:08 |楼主
shadmmd 发表于 2024-5-28 22:02
因为每次write都会移动“文件对象新”的文件指针,直到“文件对象新.close()”才会拒绝“文件对象新”的文 ...

感谢,这么一说就明白了。
6#
fightboy 发表于 2024-5-29 00:12
这种问题 直接问GPT 一下就告诉你了
7#
Bayonet 发表于 2024-5-29 00:30
用with open w打开一次就写空了。
8#
 楼主| ntldr 发表于 2024-5-29 00:48 |楼主
fightboy 发表于 2024-5-29 00:12
这种问题 直接问GPT 一下就告诉你了


问过,它的答案是:
在这段代码中,打开了两个文件对象,一个用于读取(文件对象),另一个用于写入(文件对象新)。在每次循环中,从源文件(1.txt)读取数据,然后将读取到的数据写入到目标文件(2.txt)中。

由于打开文件时使用了写入模式 ('w'),这意味着每次写入操作都会清空目标文件的内容,并从头开始写入。这样就不会出现覆盖前面内容的情况。

如果想要以追加模式写入数据,即在文件末尾添加新内容而不清空原内容,可以使用追加模式 ('a') 来打开文件对象新:

python
复制代码
文件对象新 = open(r"c:\2.txt",'a',encoding='utf-8')
这样做会使得每次写入操作都将新数据追加到文件的末尾,而不会清空已有内容。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 10:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表