我正在尝试编写一个应用程序,在选定的(子)文件夹中打开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:无效的起始字节
答案 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)
如果你想编辑(或者更确切地说是重写)一个文件,你不应该在写入模式下打开它,因为这样就无法从中读取它。 首先将完整文件读入内存或在从原件读取时写入副本(或先复制并从副本中读取,重写原件)。