python3自定义编码保加利亚语

2024-09-29 21:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python3.8解码一个MIK-BULGARIAN编码https://en.wikipedia.org/wiki/MIK_(character_set)的文件。这是一种与ASCII相同的编码,但字节128-191是西里尔字母。该文件包含拉丁字母和西里尔字母。 我当前的解决方案运行良好,但处理大文件时速度相当慢。你能给我一些如何加速的建议吗(我知道这是一种伐木工人的方法,我愿意接受建议)

def opener(filename):

    f = open(filename, "rb")
    filetext = f.read()
    cadText = translate(filetext)
    f.close()
    return cadText

mikdict = {
    128: "А",
    129: "Б",
    130: "В",
    131: "Г",
    132: "Д",
    ....
    188: "ь",
    189: "э",
    190: "ю",
    191: "я"
  }
def translate(textbytes):
    goodText = ""
    for txtbyte in textbytes:
        if (txtbyte >= 128) and (txtbyte <= 191):
            letter = str(mikdict.get(txtbyte))
        else:
            letter = chr(txtbyte)
        goodText = goodText + letter

Tags: 文件编码def字母filename建议translateletter
1条回答
网友
1楼 · 发布于 2024-09-29 21:30:12

[代码]显然正确的答案是使用map()和lambda,因为它似乎比我最初的代码片段更有效

def translate(input):
    newChars = map(lambda x: bytes([x]) if (x < 128) else bytes(mik.mikdict.get(x), "utf-8") if (x <= 191) and (x >= 128) else b"", input)
    res = b''.join(newChars).decode("utf-8")
return res

相关问题 更多 >

    热门问题