用Python在文件中搜索并替换字符
我正在尝试进行音译,也就是把文件中的每个英文字符替换成我在源代码中使用的字典里对应的另一种语言的字符,这些字符是用Unicode格式表示的。目前我已经能够从英文文件中一个一个字符地读取了,接下来我该如何在我定义的字典中查找这些字符的对应关系,并确保把结果打印到一个新的音译输出文件中呢?谢谢!:)
2 个回答
注意:在提问者的澄清后进行了更新。请查看与此答案相关的提问者评论。
像这样:
for syllable in input_text.split_into_syllables():
output_file.write(d[syllable])
这里的 output_file
是一个文件对象,用于写入数据。d
是一个字典,字典里的索引是你要处理的字符,而对应的值是你想要输出的字符。你也可以尝试逐行读取文件,而不是一次性把整个文件都读进来。
Unicode对象的translate方法是进行字符转换最简单、最快速的方式。(我假设你在使用Unicode,而不是普通的字节字符串,因为那样就无法处理像'पत्र'
这样的字符了!)
你只需要按照文档中指定的方式来准备你的字符转换字典:
每个键必须是一个整数,也就是Unicode字符的编码点; 比如,0x0904是
ऄ
的编码点,也就是“德瓦那加里字母短A”,所以在字典中进行转换时,你需要用整数0x0904(换算成十进制就是2308)作为键。(如果你想查看很多南亚文字的编码点,可以参考这个pdf。)对应的值可以是一个Unicode序号,一个Unicode字符串(这通常是你在转换时会用到的,比如如果你想把德瓦那加里字母短A转换成英文的'a',你就可以用
u'a'
),或者是None(如果在“转换”过程中你想直接删除这个Unicode字符的实例)。
在字典中找不到的字符会原封不动地从输入传到输出。
一旦你的字典准备好了,output_text = input_text.translate(thedict)
就会为你完成所有的字符转换,而且速度非常快。你可以对任何大小的Unicode文本块进行处理,只要它能在内存中舒适地存放——基本上,一次处理一个文本文件在大多数机器上都是没问题的(例如,伟大的——而且庞大的——《摩诃婆罗多》在任何可以免费下载的版本中最多也就几十兆字节——包括梵文[[与德瓦那加里和罗马音形式交叉链接]]、英文翻译——可以在这个网站找到)。