Python 返回汉字的汉语拼音

 更新时间:2009年02月27日 20:40:59   作者:  
最近做程序用到汉字转汉语拼音的问题,首先想到Google一下,但是拿来看了一下源码,不是甚清楚。
后来想到自己Delphi有一个获得拼音的代码。于是找了出来。研究了一下代码如下:
复制代码 代码如下:

function get_hz_pywb(hzstr: string; pytype: integer): string;
var
I: Integer;
allstr: string;
hh: THandle;
pp: pointer;
ss: TStringList;
function retturn_wbpy(tempstr: string; tqtype: integer): string;
var
outstr, str: string;
i: integer;
begin
//################### 汉字查询电位
i := 0;
while i <= ss.Count - 1 do
begin
str := ss.Strings[i];
if (tempstr = trim(str[1] + str[2])) or (tempstr = trim(str[3] + str[4])) then
begin
str := ss.Strings[i];
Break;
end;
i := i + 1;
end;
//###################
outstr := ''; //提取编码
if tqtype = 1 then
begin
for i := pos('①', str) + 2 to pos('②', str) - 1 do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
if tqtype = 2 then
begin
for i := pos('②', str) + 2 to pos('③', str) - 1 do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
if tqtype = 3 then
begin
for i := pos('③', str) + 2 to pos('④', str) - 1 do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
if tqtype = 4 then
begin
for i := pos('④', str) + 2 to length(str) do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
Result := trim(outstr);
end;
begin
//加载资源文件,将内容赋值给 s
ss := TStringList.Create;
hh := FindResource(hInstance, 'mywb', 'TXT');
hh := LoadResource(hInstance, hh);
pp := LockResource(hh);
ss.Text := pchar(pp);
UnLockResource(hh);
FreeResource(hh);
allstr := '';
i := 0;
while i <= length(hzstr) do //提取汉字字符
begin
if (Ord(hzstr[I]) > 127) then
begin
if allstr = '' then
allstr := retturn_wbpy(hzstr[I] + hzstr[I + 1], pytype)
else
allstr := allstr + retturn_wbpy(hzstr[I] + hzstr[I + 1], pytype);
i := i + 2;
end
else
begin
if allstr = '' then allstr := hzstr[I] else allstr := allstr + hzstr[I];
i := i + 1;
end;
end;
ss.Free;
Result := trim(allstr);
en
function get_hz_pywb(hzstr: string; pytype: integer): string;
var
I: Integer;
allstr: string;
hh: THandle;
pp: pointer;
ss: TStringList;
function retturn_wbpy(tempstr: string; tqtype: integer): string;
var
outstr, str: string;
i: integer;
begin
//################### 汉字查询电位
i := 0;
while i <= ss.Count - 1 do
begin
str := ss.Strings[i];
if (tempstr = trim(str[1] + str[2])) or (tempstr = trim(str[3] + str[4])) then
begin
str := ss.Strings[i];
Break;
end;
i := i + 1;
end;
//###################
outstr := ''; //提取编码
if tqtype = 1 then
begin
for i := pos('①', str) + 2 to pos('②', str) - 1 do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
if tqtype = 2 then
begin
for i := pos('②', str) + 2 to pos('③', str) - 1 do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
if tqtype = 3 then
begin
for i := pos('③', str) + 2 to pos('④', str) - 1 do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
if tqtype = 4 then
begin
for i := pos('④', str) + 2 to length(str) do
if str[i] <> '' then if outstr = '' then outstr := str[i] else outstr := outstr + str[i];
end;
Result := trim(outstr);
end;
begin
//加载资源文件,将内容赋值给 s
ss := TStringList.Create;
hh := FindResource(hInstance, 'mywb', 'TXT');
hh := LoadResource(hInstance, hh);
pp := LockResource(hh);
ss.Text := pchar(pp);
UnLockResource(hh);
FreeResource(hh);
allstr := '';
i := 0;
while i <= length(hzstr) do //提取汉字字符
begin
if (Ord(hzstr[I]) > 127) then
begin
if allstr = '' then
allstr := retturn_wbpy(hzstr[I] + hzstr[I + 1], pytype)
else
allstr := allstr + retturn_wbpy(hzstr[I] + hzstr[I + 1], pytype);
i := i + 2;
end
else
begin
if allstr = '' then allstr := hzstr[I] else allstr := allstr + hzstr[I];
i := i + 1;
end;
end;
ss.Free;
Result := trim(allstr);
en

这里需要用到一个资源文件。随后我会把资源文件地址发上来。
我把他改成Python代码供大家研究。。。。
复制代码 代码如下:

# -*-coding:utf-8-*-
# 返回汉字的拼音
def Return_pinyin(word):
global reslist
for line in reslist:
if (word==line[0]+line[1]) or (word==line[2]+line[3]):
str = line
break
# 取①和②之间的内容
s = str.find(u'①')+4
e = str.find(u'②')+3
return str[s:e]

def GetPy(word):
#首先装载资源文件
i=0
allstr = ''
while i<len(word):
if ord(word[i])>127:
if allstr:
allstr += Return_pinyin(word[i]+word[i+1])
else:
allstr = Return_pinyin(word[i]+word[i+1])
i +=2
else:
if allstr:
allstr += word[i]
else:
allstr = word[i]
i +=1
return allstr
if __name__=='__main__':
f = open('wbtext1.txt','r')
reslist = f.readlines()
f.close()
word = raw_input(u'请输入汉字: ')
print GetPy(word).lower()

如果大家有什么问题欢迎讨论。。。。。。

相关文章

  • Python钉钉报警及Zabbix集成钉钉报警的示例代码

    Python钉钉报警及Zabbix集成钉钉报警的示例代码

    这篇文章主要介绍了Python钉钉报警及Zabbix集成钉钉报警的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python机器学习算法之决策树算法的实现与优缺点

    Python机器学习算法之决策树算法的实现与优缺点

    决策树(Decision Tree)是一种基本的分类与回归方法,这篇文章主要给大家介绍了关于Python机器学习算法之决策树算法实现与优缺点的相关资料,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Python二维数组不同初始化方式的差异说明

    Python二维数组不同初始化方式的差异说明

    这篇文章主要介绍了Python二维数组不同初始化方式的差异说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • python hmac模块验证客户端的合法性

    python hmac模块验证客户端的合法性

    这篇文章主要介绍了python hmac模块验证客户端的合法性,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • python中nan与inf转为特定数字方法示例

    python中nan与inf转为特定数字方法示例

    这篇文章主要给大家介绍了将python中nan与inf转为特定数字的方法,文中给出了详细的示例代码和运行结果,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • django rest framework之请求与响应(详解)

    django rest framework之请求与响应(详解)

    下面小编就为大家带来一篇django rest framework之请求与响应(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望对大家有所帮助
    2017-11-11
  • python实现对图片进行旋转,放缩,裁剪的功能

    python实现对图片进行旋转,放缩,裁剪的功能

    今天小编就为大家分享一篇python实现对图片进行旋转,放缩,裁剪的功能,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python使用for循环计算0-100的整数的和方法

    python使用for循环计算0-100的整数的和方法

    今天小编就为大家分享一篇python使用for循环计算0-100的整数的和方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python实现获取网站PR及百度权重

    Python实现获取网站PR及百度权重

    这篇文章主要介绍了Python实现获取网站PR及百度权重,本文使用传参的方式请求站长工具和谷歌工具获取PR值和百度权重,需要的朋友可以参考下
    2015-01-01
  • python编程使用selenium模拟登陆淘宝实例代码

    python编程使用selenium模拟登陆淘宝实例代码

    这篇文章主要介绍了python编程使用selenium模拟登陆淘宝实例代码,涉及selenium的简介及Windows下的安装,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论