近日给兄弟公司编写一个HR管理软件,其中需要用到这样一个功能:当用户在窗口中输入员工姓名时,能够自动取出姓名中的拼音首字母,作为"助记码",以便用于后续的查询。
尝试了几种不同的方案以后,最终参考水木社区中的Roy兄提出的方案,用Python+Sqlite的方式来完成此项工作。
软件环境如下:
python 3.2.2
pyqt 4.9.1
sqlite 3
在文件头部需先导入sqlite3:
import sqlite3
然后来看getFirstLetter段代码:
1: def getFirstLetter(self, text):
2: pinyinlist=[]
3: for i in range(len(text)):
4: hanziSql = 'select pinyin from hanzi where hanzi = "'\
5: + text[i] + '"'
6: pinyinlist.append([])
7: result = self.execSql(hanziSql)
8: for pinyin in result:
9: pinyinlist[i].append(pinyin[0][0])#数据库中查到的是整个拼音,用pinyin[0][0]则指定返回首字母
10: poslist=[-1]*len(text)
11: i=0
12: results=[]
13: n=0
14: while (i>=0):
15: poslist[i]=poslist[i]+1
16: if (poslist[i]>=len(pinyinlist[i])) :
17: poslist[i]=-1
18: i=i-1
19: continue
20: if i==len(text)-1:
21: results.append('')
22: for t in range(len(text)):
23: results[n]=results[n]+pinyinlist[t][poslist[t]]
24: n=n+1
25: else :
26: i=i+1
27: return results
里面调用到的execSql段代码如下:
1: def execSql(self, sql):
2: cxn = sqlite3.connect(db)
3: cur = cxn.cursor()
4: cur.execute(sql)#执行查询
5: return cur.fetchall()
6: cxn.close()
execSql这一段当然可以直接并到getFirstLetter中,不过舍得在其它地方要调用它,所以单独列出.
具体使用的方法如下,比如我们要查"舍得学苑"的拼音首字母:
easyCode = self.getFirstLetter("舍得学苑") if len(easyCode) > 0: print(easyCode[0])#返回的结果中有多音词 ,只取第一个
本文用到的数据库可到这里下载:华为网盘下载