当前位置: 首页 > 面试题库 >

替换并覆盖而不是附加

干鑫鹏
2023-03-14
问题内容

我有以下代码:

import re
#open the xml file for reading:
file = open('path/test.xml','r+')
#convert to string:
data = file.read()
file.write(re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>",r"<xyz>ABC</xyz>\1<xyz>\2</xyz>",data))
file.close()

我想用新内容替换文件中的旧内容。但是,当我执行代码时,将附加文件“
test.xml”,即,我的旧内容被新的“替换”内容所取代。为了删除旧内容而只保留新内容,我该怎么办?


问题答案:

您需要seek先写入文件的开头,然后再使用(file.truncate()如果要进行就地替换):

import re

myfile = "path/test.xml"

with open(myfile, "r+") as f:
    data = f.read()
    f.seek(0)
    f.write(re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>", r"<xyz>ABC</xyz>\1<xyz>\2</xyz>", data))
    f.truncate()

另一种方法是读取文件,然后使用再次打开它open(myfile, 'w')

with open(myfile, "r") as f:
    data = f.read()

with open(myfile, "w") as f:
    f.write(re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>", r"<xyz>ABC</xyz>\1<xyz>\2</xyz>", data))

无论是truncateopen(..., 'w')将改变inode的文件的数量(我测试过两次,一次是与Ubuntu
12.04 NFS和曾经与EXT4)。

顺便说一句,这与Python并没有真正的关系。解释器调用相应的低级API。该方法truncate()在C编程语言中的工作原理相同:请参见http://man7.org/linux/man-
pages/man2/truncate.2.html



 类似资料:
  • 我正在使用supportlib v4来实现主细节流。 方法在单击后调用:

  • 问题内容: 好的,在将多行写入文本文件时遇到麻烦。 该程序运行,但是不会每次都使用新行 当我希望它运行4次时,文本文件应如下所示: 相反,它看起来像: 谁知道如何解决这个问题?所有导入均正确导入。 来源(经过略微编辑,假设所有内容均已正确定义): 问题答案: 确保在创建的实例时要附加到其末尾。这可以通过使用此特定的构造函数来完成,该构造函数将其他参数作为第二个参数。这告诉追加到文件末尾,而不是覆盖

  • 我有一个方法应该用新内容覆盖当前文件,但是FileWriter()只是附加新内容,而不是覆盖旧内容。 这是我的FileWriter的设置方式 这是保存方法 当我运行此方法时会出现问题,它没有覆盖文件,而是将新内容附加到文件中。 我想要的: 发生了什么:

  • React没有合并我对状态对象所做的更改,而是完全覆盖它。 这可能是由上下文引起的吗?我不确定是否可以直接作为道具传递分派事件。我尝试过在另一个函数中包装,比如在“提升状态”文档中,但是没有效果。 预期产量 电流输出 React上下文保存状态 通用输入组件

  • 问题内容: 我使用了下面的jQuery 示例 ,它的工作原理就像一个魅力。但是,它会附加结果。我需要更改什么以替换结果而不是附加结果? 问题答案: 您可以在追加之前清空元素 或使用方法

  • 问题内容: 我对react.js还是很陌生,并且正在通过构建砌体样式布局进行试验。 我将每个元素呈现给DOM,然后需要遍历每个项目并根据前面的元素应用x和y位置。 初始模型如下所示: (我只显示了一个项目以使内容简短)。 完成循环并获取x和y数据后,我想将其应用于podStyle对象。我用以下数据调用setState: 这似乎从模型中删除了所有当前数据,而只剩下了podStyle数据。我是否误解了