【问题标题】:How to replace text using python if a file contains binary code and text both?如果文件同时包含二进制代码和文本,如何使用 python 替换文本?
【发布时间】:2018-11-25 03:13:11
【问题描述】:

我想替换包含二进制代码和文本混合的 Houdini 文件(.hip)的文本。我有替换文本文件的python代码。当我尝试替换 Houdini 文件中的文本时,替换后文件会损坏。

谁能告诉我如何替换 Houdini 文件中的文本而不损坏它?

代码:

import fileinput,sys
for line in fileinput.input("file_name",inplace=True):
    line = line.replace("from","to")
    sys.stdout.write(line)

当我尝试使用此代码替换 Houdini 文件(.hip)时,文件会损坏。

有人知道如何在不打开Houdini文件的情况下替换它吗?

【问题讨论】:

  • 您是否尝试过以二进制模式打开文件? docs.python.org/3/library/fileinput.html
  • 不,让我试试……
  • 文件格式可能对字符串长度进行编码……你能告诉我们/anything/有关格式的信息吗?我倾向于反对“请为我施魔法,但我会让你猜!”
  • Houdini 文件使用 .hip 扩展名
  • 这解释了一切。

标签: python houdini


【解决方案1】:

我最近遇到了这个问题,并尝试了 cmets 中提到的建议。
这是对我有用的最终解决方案:

import re
def UpdateFile(self, file, oldstrg, newStr):
    bytetofind = bytes(oldstrg, encoding='utf-8')
    bytetoreplace = bytes(newStr, encoding='utf-8')
    f = open(file, 'rb+')
    text = f.read()
    text = re.sub(bytetofind , bytetoreplace, text, count=1)
    f.seek(0)
    f.write(text)
    f.close()

count=1 之所以存在,是因为我只想替换该字符串的一个实例。
您可以根据需要更改/删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多