You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用字典批量替换文本文件ASCII为Unicode字符失败,求解决方案

问题:多键字典字符替换失效,仅单键时生效

我写了个Python函数,想读取文本文件把一批字符替换成对应Unicode字符,但只要字典里超过一项,就完全替换不了,只有留一项时才正常。调试一整天没解决。

原代码

import re

match = {
    # 原字典有100多项
    "᾿Ι" : "Ἰ",
    "᾿Α" : "Ἀ",
    "´Α" : "Ά",
    "`Α" : "Ὰ",
    "᾿Α" : "Ἀ",
    "᾿Ρ" : "ῤ",
    "῾Ρ" : "Ῥ"
}

with open("file.txt", "r", encoding="utf-8") as file, open("OUT.txt", "w", encoding="utf-8") as newfile:
    def replace_all(text, dict):
        for i, j in dict.items():
            result, count = re.subn(r"%s" % i, j, str(text))
        return result, count
    
    # 执行替换
    string = file.read()
    result, count = replace_all(string, match)
    
    # 写入结果
    newfile.write(result)
    print("Changes: " + str(count))

待处理文本示例

Βίβλος γενέσεως ᾿Ιησοῦ Χριστοῦ, υἱοῦ Δαυῒδ, υἱοῦ ᾿Αβραάμ.

其中᾿Ι和᾿Α需要分别替换为Ἰ和Ἀ。


解决方案

问题根源

  1. 替换未累积:每次循环都用原始text做替换,而非上一次替换后的结果,最后只保留了最后一个键的替换效果,前面的全白做了。
  2. 计数错误:返回的count只是最后一次替换的次数,不是所有替换的总和。
  3. 字典重复键:match里"᾿Α"出现两次,字典键唯一,后面的会覆盖前面的,导致冗余且可能混淆。
  4. 不必要的类型转换:str(text)完全多余,因为传入的text已经是字符串。

修正后的代码

import re

# 移除重复键,确保每个键唯一
match = {
    "᾿Ι" : "Ἰ",
    "᾿Α" : "Ἀ",
    "´Α" : "Ά",
    "`Α" : "Ὰ",
    "᾿Ρ" : "ῤ",
    "῾Ρ" : "Ῥ"
}

def replace_all(text, replace_dict):
    # 初始化结果为原始文本,总计数为0
    result = text
    total_count = 0
    for old_str, new_str in replace_dict.items():
        # 用上一次的结果继续替换,转义特殊字符避免正则解析错误
        result, count = re.subn(re.escape(old_str), new_str, result)
        total_count += count
    return result, total_count

with open("file.txt", "r", encoding="utf-8") as file, open("OUT.txt", "w", encoding="utf-8") as newfile:
    string = file.read()
    result, total_count = replace_all(string, match)
    
    newfile.write(result)
    print(f"Changes: {total_count}")

关键改进点

  • 用result = text初始化,每次迭代基于上一次的替换结果继续处理,保证所有替换都生效。
  • 新增total_count累加每次替换的次数,最终返回总替换数。
  • 用re.escape(old_str)转义特殊字符(比如字典里的᾿、´等),避免正则表达式解析错误。
  • 移除字典重复键,避免不必要的覆盖。
  • 把函数定义移到with语句外,符合代码规范。

内容的提问来源于stack exchange,提问作者Lavonen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:12:10