def read_txt(file):with open(file, 'r') as f: txt = f.read()return txtdef get_first_letter(str_hz): vret=''for char in str_hz: vchar=char.encode('gbk')if vchar[0]<176: vret+=charelif (vchar[0]>=176 and vchar[0]<=215):if (vchar >= "匝".encode('gbk')): vret += 'z'elif (vchar >= "压".encode('gbk')): vret += 'y'elif (vchar >= "昔".encode('gbk')): vret += 'x'elif (vchar >= "挖".encode('gbk')): vret += 'w'elif (vchar >= "塌".encode('gbk')): vret += 't'elif (vchar >= "撒".encode('gbk')): vret += 's'elif (vchar >= "然".encode('gbk')): vret += 'r'elif (vchar >= "期".encode('gbk')): vret += 'q'elif (vchar >= "啪".encode('gbk')): vret += 'p'elif (vchar >= "哦".encode('gbk')): vret += 'o'elif (vchar >= "拿".encode('gbk')): vret += 'n'elif (vchar >= "妈".encode('gbk')): vret += 'm'elif (vchar >= "垃".encode('gbk')): vret += 'l'elif (vchar >= "喀".encode('gbk')): vret += 'k'elif (vchar >= "击".encode('gbk')): vret += 'j'elif (vchar >= "哈".encode('gbk')): vret += 'h'elif (vchar >= "噶".encode('gbk')): vret += 'g'elif (vchar >= "发".encode('gbk')): vret += 'f'elif (vchar >= "蛾".encode('gbk')): vret += 'e'elif (vchar >= "搭".encode('gbk')): vret += 'd'elif (vchar >= "擦".encode('gbk')): vret += 'c'elif (vchar >= "芭".encode('gbk')): vret += 'b'elif (vchar >= "啊".encode('gbk')): vret += 'a'elif vchar[0]>215: second_ch=read_txt('second_ch_txt') second_en=read_txt('second_first_py.txt') indx_ch=second_ch.find(char) vret+=second_en[indx_ch].lower()return vretif __name__ == '__main__':print('字符串:人生苦短,我用Python!=========对应的拼音字母:',get_first_letter('人生苦短,我用Python!'))
1)本案例旨在获取给定txt文本的字符拼音首字母,这种获取首字母的方式也是信息建设过程中常用的功能。一般通过两种方式实现,最直接的就是通过字符串的索引直接建立全部汉字的对照来进行取得,另一种则是利用汉字的编码规则来实现的,本文两种方法均涉及到了; 2)本文通过将汉字转化为GBK编码来实现对汉字的对应,在GBK编码中一个汉字对应的是两个字节,当第一个字节的值小于176时,说明这个字符对应的不是汉字,直接加在后面即可:if vchar[0]<176: vret+=char
当第一个字符对应的字节在176~215之间时说明字符对应的第一类汉字,可以直接进行编码的方式获取其首字母,上述代码中的汉字为对应字母表中的第一个汉字,因此从z开始进行判断。
elif (vchar[0]>=176 and vchar[0]<=215):
对于字节大于215的属于第二类汉字,对于此类汉字的处理方式就是建立两个表,一个是所有二级汉字的表,另一个是所有二级汉字对于的首字母字符串的索引表,一一对应即可。
elif vchar[0]>215: second_ch=read_txt('second_ch_txt') second_en=read_txt('second_first_py.txt') indx_ch=second_ch.find(char) vret+=second_en[indx_ch].lower()return vret