如何在 Python 中找到替换 .odt 文件中的字符串并将其输出到另一个 .odt 文件?

How can I find a replace a string in an .odt file in Python and output it to another .odt file?

提问人:Michael Gauthier 提问时间:2/26/2023 最后编辑:mzjnMichael Gauthier 更新时间:2/27/2023 访问量:246

问:

假设我在特定目录(不是当前工作目录)中有一个名为“myfile.odt”的 .odt 文件,我想将“astring”替换为“anewstring”,然后将修改后的文件导出到当前目录中的新 .odt 文件中。如何在Python中做到这一点?

我尝试用 XML.Etree 来做这件事,但对我来说有点太多了,我无法理解,我遇到了几堵墙,没有真正理解我做错了什么。我也尝试了这里提供的解决方案,但无济于事......实际上,其他帖子中的解决方案都没有为我做到这一点,ChatGPT 也无济于事,而且我正在苦苦挣扎,因为我不习惯操作类似 XML 的文件,如果我理解正确的话,这是考虑和处理 .odt 和 Word 文档的适当方式一般来说。

任何小费都会很棒!多谢!

编辑:显然将.odt文件视为文本文件不起作用(新文件已写入,但与输入文件相同)。此外,由于 Git 页面上解释的问题,odfpy 库似乎也无法正常工作。任何能够提供 XML.Etree 方法(或任何实际有效的方法)的人都会非常友善......

编辑2:这是我用来尝试将文件作为简单的.txt文件处理的脚本,但它导致输出文件损坏且无法使用,这使我相信XML.Etree可能更合适:

f1 = open('test.odt', 'r', encoding='latin') 
f2 = open('newfile.odt', 'w') 
for line in f1: 
    f2.write(line.replace('mystring', 'newstring')) 
f1.close() 
f2.close()
python elementtree odt opendocument

评论

0赞 Paul Collingwood 2/26/2023
new = original.replace(“旧字符串”, “新字符串”)。您也许可以忽略结构等.XML是“只是”文本,您不必将其视为XML
0赞 Michael Gauthier 2/26/2023
哦,天哪!所以你的意思是,一个古老的“将 open(”myfile.odt“) 作为 f” 会奏效吗?我马上试试!
0赞 AbdullahSaidAbdeaaziz 2/26/2023
检查这些技术文件
0赞 Michael Gauthier 2/26/2023
@PaulCollingwood,好吧,它似乎解析并写入新文件而没有报告任何问题,但我无法使用 LibreOffice 打开新的.odt文件,它说文件已损坏。这是我的脚本: f1 = open('test.odt', 'r', encoding='latin') f2 = open('newfile.odt', 'w') for line in f1: f2.write(line.replace('mystring', 'newstring')) f1.close() f2.close() 任何想法?
1赞 mzjn 2/27/2023
1)对不起,链接不好。更好: opensource.com/article/22/8/odt-files 2) 到目前为止,您还没有向我们展示任何 XML 文件或任何使用 ElementTree 处理它的尝试。目前尚不清楚困难是什么。

答: 暂无答案