ntldr 发表于 2024-5-28 18:25

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

本帖最后由 ntldr 于 2024-5-28 18:28 编辑

请教各位大神:在本站看孙兴华的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文件

shadmmd 发表于 2024-5-28 22:02

因为每次write都会移动“文件对象新”的文件指针,直到“文件对象新.close()”才会拒绝“文件对象新”的文件指针移动。你想每次write都覆盖2.txt已有的全部内容,那么就要把“文件对象新.close()”这段放在while循环内。

ntldr 发表于 2024-5-28 22:07

boryou 发表于 2024-5-28 20:34
你是先open文件,然后不断往这个文件里写入,而不是每次写入都重新open文件

多谢,多谢,想了好久。

ntldr 发表于 2024-5-28 22:08

shadmmd 发表于 2024-5-28 22:02
因为每次write都会移动“文件对象新”的文件指针,直到“文件对象新.close()”才会拒绝“文件对象新”的文 ...

感谢,这么一说就明白了。

fightboy 发表于 2024-5-29 00:12

这种问题 直接问GPT 一下就告诉你了

Bayonet 发表于 2024-5-29 00:30

用with open w打开一次就写空了。

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')
这样做会使得每次写入操作都将新数据追加到文件的末尾,而不会清空已有内容。

页: [1]
查看完整版本: python以 w 模式打开的文件,write写入时为什么不覆盖前面的内容?