【问题标题】:Change string in file in python在python中更改文件中的字符串
【发布时间】:2015-01-09 06:44:16
【问题描述】:

我在 python 中更改文件时遇到问题。我需要改变一个字符串。 该文件不是文本文件,但可以使用文本编辑器进行编辑。

这是我的代码:

with open(esp,"r") as f:                
            content=f.readlines()         
with open(esp_carsat,"w") as f:
        for line in content:
                f.write(line.replace("201","202")))

问题是我认为内容是以字节为单位的。 '\xff\xfe\x00\r\x00\n'

所以我的替换不起作用。我尝试使用编码,但之后文件不可读。此外,我在文件中有重音符号 (é,è...)

有没有办法做我想做的事?

【问题讨论】:

    标签: python string python-2.7 replace


    【解决方案1】:

    您有 UTF-16 编码 数据。解码为 Unicode 文本,替换,然后再次编码回 UTF-16:

    >>> data = '\xff\xfe<\x00I\x00n\x00s\x00t\x00a\x00n\x00c\x00e\x00N\x00a\x00m\x00e\x00s\x00>\x00\r\x00\n\x00'
    >>> data.decode('utf16')
    u'<InstanceNames>\r\n'
    

    我不得不附加一个额外的\x00 来解码它;通过在不解码 Python 的情况下读取文件,将 \n 上的行拆分为 next 行。

    Unicode 数据可以很好地处理重音符号,不需要进一步的工作。

    使用io.open() 最简单的方法是打开为您进行解码和编码的文件对象:

    import io
    
    with io.open(esp, "r", encoding='utf16') as f:                
        content=f.readlines()         
    
    with open(esp_carsat, "w", encoding='utf16') as f:
        for line in content:
            f.write(line.replace("201", "202")))
    

    【讨论】:

      【解决方案2】:

      这是 UTF-16-LE 数据:

      >>> b
      '\xff\xfe<\x00I\x00n\x00s\x00t\x00a\x00n\x00c\x00e\x00N\x00a\x00m\x00e\x00s\x00>\x00\r\x00\n'
      >>> print(b[:-1].decode('utf-16-le'))
      <InstanceNames>
      

      【讨论】:

      • 开头的\xff\xfe 字节是字节顺序标记 或BOM。无需在此处选择小端或大端,数据会自行告诉您。
      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多