如何在txt文件中使用UTF-8编码和替换文本?

时间:2014-08-24 14:24:32

标签: python replace utf-8

我正在尝试编写一个应用程序,在选定的(子)文件夹中打开txt文件,并用字母“š”替换所有字母“ž”,并以UTF-8格式保存。

这是我到目前为止所做的工作(版本2 - 请参阅编辑):

import os
import codecs

startIn = os.getcwd()

print()
print("Pregledujem: " + startIn + "\\")
print("-------------------------")

for dirName, subdirList, fileList in os.walk(startIn):
  print()
  print("Trenutna mapa: " + dirName + "\\")
  for fname in fileList:
    if fname.endswith(".srt"):
      fullpath = dirName + "\\" + fname
      print("  Podnapis: " + fname )
      with codecs.open(fullpath, 'r+', "UTF-8-sig") as cursub:
        lines = cursub.read().replace("ž","š")
        cursub.seek(0)
        cursub.write(lines)

修改

现在替换这些字母就像它应该的那样,但我仍然无法弄清楚如何正确编码文件TO utf-8

当前版本输出以下错误:

  

UnicodeDecodeError:'utf-8'编解码器无法解码字节0x9a的位置   220:无效的起始字节

2 个答案:

答案 0 :(得分:1)

如果您想在r+模式下阅读和书写

cursub = codecs.open(filename, 'r+',"utf-8")
lines = cursub.read().replace("š", "ž")
cursub.seek(0)  # go back to start of file
cursub.write(lines) # rewrite updated lines

使用with会自动关闭文件:

with codecs.open(filename, 'r+',"utf-8") as cursub: 
    lines = cursub.read().replace("š", "ž")
    cursub.seek(0)
    cursub.write(lines)

答案 1 :(得分:0)

如果你想编辑(或者更确切地说是重写)一个文件,你不应该在写入模式下打开它,因为这样就无法从中读取它。 首先将完整文件读入内存或在从原件读取时写入副本(或先复制并从副本中读取,重写原件)。