将编辑写入文件会删除内容,而不是对其进行编辑

问题描述

问题:从目标文件删除内容,而不是编辑和保存文件(原始内容+已编辑的内容

想要:希望此修复程序尽可能接近 FuncB ,因为这是我的实验

#IMPORTS
import json
import os

#EXTERNAL VARIABLES/FUNCTIONS
cdl = str(os.path.realpath(os.path.join(os.getcwd(),os.path.dirname(__file__)))+os.sep)
GetFileCont = lambda filename,extension="txt",dir=cdl: list(open(str(dir)+str(filename)+"."+str(extension)))

#FUNCTION TO FIX
def FuncB(filename:str,extension:str,line:int,new_data,dir=cdl):  # <--- After
    open(
        str(dir)+str(filename)+"."+extension,"w"
        ).writelines(
            [new_data+"\n" if (i+1)==line else v for i,v in enumerate(GetFileCont(str(filename),extension))]
            )

尝试:我已经尝试了很长一段时间(是的,它很好用),我只是想尝试看看我是否可以这样做

#OTHER WAY TO COMPLETE THE broKEN FUNCTION
def FuncA(filename,extension,line,dir=cdl):  # <--- Before
    data = GetFileCont(str(filename),extension)
    data[line-1] = new_data+"\n"
    with open(str(dir)+str(filename)+"."+extension,"w") as f:
        f.writelines(data)
    f.close()

解决方法

您不能像这样单线做。直到返回writelines()之后,才会评估open()的参数,并且当您以open()模式调用w时,它将截断文件。因此,您要在清空文件后尝试读取文件。

您可以改用r+模式。这将以读写模式打开文件而不清空它。但是,如果新内容比旧内容短,则不会删除尾随数据。

粘贴第二个版本。它更具可读性,并且可以按预期工作。