Python能否在文件非末尾位置(如关键词处)插入文本?附代码咨询
问题:如何在文件非末尾位置(基于关键词定位)添加文本?
用户需求:想在文件的非末尾位置(例如基于关键词定位)添加一段文本,当前代码如下:
import os import datetime file_one = "/var/lib/odoo/projects/Odoo/ecole/files/"+folder+"/eleves.xml" modified = os.path.getmtime(file_one) modified_date = datetime.datetime.fromtimestamp(modified) day_date = datetime.datetime.today() mode = 'a' if day_date.day != modified_date.day: mode = 'w' xml = xml_head + xml + xml_footer with open(file_one, mode) as f: f.write(xml)
解决方案
当然可以实现!你当前的代码是基于日期判断来追加内容到文件末尾,或者直接覆盖整个文件,但要在指定关键词位置插入文本,我们需要调整处理逻辑,核心思路是先读取整个文件内容,找到关键词位置后插入新文本,最后写回文件。下面是修改后的代码和详细说明:
步骤说明:
- 先读取原文件的全部内容
- 定义你要定位的关键词(比如XML中的某个标签),找到它的位置
- 在关键词的指定位置(前/后)插入你要添加的
xml内容 - 结合你原来的日期判断逻辑,完成最终的文件写入
修改后的代码示例:
import os import datetime # 替换成你实际要定位的关键词(比如XML里的特定标签) target_keyword = "<students>" file_one = "/var/lib/odoo/projects/Odoo/ecole/files/"+folder+"/eleves.xml" modified = os.path.getmtime(file_one) modified_date = datetime.datetime.fromtimestamp(modified) day_date = datetime.datetime.today() # 你要插入的目标文本块 xml_content = xml_head + xml + xml_footer # 读取原文件内容 with open(file_one, 'r') as f: original_content = f.read() # 处理插入逻辑 if target_keyword in original_content: # 在关键词后面插入新内容(如果要在前面插入,就改成 f"{xml_content}\n{target_keyword}") new_content = original_content.replace(target_keyword, f"{target_keyword}\n{xml_content}") else: # 如果没找到关键词, fallback 到追加到文件末尾的逻辑 new_content = original_content + "\n" + xml_content # 结合日期判断写入文件(因为已经生成了完整的新内容,直接用'w'模式覆盖即可) with open(file_one, 'w') as f: f.write(new_content)
注意事项:
- 请根据你的XML实际结构替换
target_keyword,确保它能唯一定位到你要插入的位置 - 插入时记得添加换行符
\n,保证XML格式的可读性 - 如果你的文件特别大,读取整个内容会占用较多内存,这种情况下可以考虑逐行读取处理,但普通大小的XML文件用上述方法足够高效
内容的提问来源于stack exchange,提问作者PseudoWithK
相关产品推荐
相关产品推荐

