Writelines(python)清空了应该写入的文本文件,且未写入任何内容

2 投票
1 回答
4114 浏览
提问于 2025-04-17 16:27

我正在做的事情其实很简单,但不知为什么,没法把内容写入我需要的文本文件。

我首先获取了用户的输入,并把它存储在assoc这个变量里。这个步骤没问题,因为我可以随时打印出assoc,它的值看起来也正常。

接下来,我根据assoc的值是0、1还是2,打开不同的文件。我读取所有的行,并把读取到的内容存储在beta这个变量里,然后我计算beta的长度,并把这个长度赋值给prodlen,再在prodlen上加1,把新的值赋给localid,最后关闭这个文件对象。我提到这些是因为我担心我可能漏掉了什么重要而简单的东西。

if assoc==0:
    fob=open('pathto/textfile1.txt','r')
if assoc==1:
    fob=open('pathto/textfile2.txt','r')
if assoc==2:
    fob=open('pathto/textfile3.txt','r')

beta=fob.readlines();
prodlen=len(beta);
localid=prodlen+1;
fob.close;

在获取用户输入、打开文件、列出内容并读取长度后,我又用用户的输入来打开文件,这次是为了写入内容。(我只列出了一个可能的条件语句,因为其他的条件语句基本相同,只是写入的文件和VALUE这个字符串不同。)我在beta的末尾添加了一个换行符\n,后面跟着一个字符串,这里用VALUE表示。然后我把localid以字符串的形式加到最后。

if assoc==0:
    fob=open('pathto/textfile1.txt','w')
    beta.append("\nVALUE"+str(localid))
    print (beta)
    fob.writelines(beta)

不过,我真正的问题出在最后两行。当我打印beta时,它包含了我刚刚添加的新值。但当我尝试把这个列表写入文件时,它却把文件里原有的数据清空了,什么也没写进去! 我还是个Python新手,所以请尽量把解决方案简单点(如果可以的话)。我觉得这个问题的解决方法应该比较简单,我可能只是忽略了什么。

1 个回答

2

在你调用 open 函数的时候,使用 'a' 选项,而不是 'w'。因为 'w' 是覆盖写入,会把原来的内容删掉,而 'a' 是追加写入,会把新内容加到原来的内容后面。

这里有关于 open 函数的官方文档

这个链接解释了不同的打开模式,比如 a、a+、w、w+ 和 r+ 的区别。

这些信息很有用,可以帮助你理解不同的模式。

撰写回答