将编辑写入文件会删除内容而不是编辑它
Writing edit to file removes contents instead of editing it
问题:从目标文件中删除内容而不是编辑和保存文件(原始内容+编辑后的内容)
想要:希望修复尽可能接近 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, new_data, 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()
你不能像那样做 one-liner。 writelines()
的参数直到 open()
returns 之后才会被评估,当您使用 w
模式调用 open()
时,它会截断文件。所以你试图在文件清空后读取文件。
您可以改用 r+
模式。这将以 read-write 模式打开文件而不清空它。但是,如果新内容比旧内容短,则不会删除尾部数据。
坚持使用第二个版本。它更具可读性,并且按预期工作。
问题:从目标文件中删除内容而不是编辑和保存文件(原始内容+编辑后的内容)
想要:希望修复尽可能接近 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, new_data, 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()
你不能像那样做 one-liner。 writelines()
的参数直到 open()
returns 之后才会被评估,当您使用 w
模式调用 open()
时,它会截断文件。所以你试图在文件清空后读取文件。
您可以改用 r+
模式。这将以 read-write 模式打开文件而不清空它。但是,如果新内容比旧内容短,则不会删除尾部数据。
坚持使用第二个版本。它更具可读性,并且按预期工作。