草庐IT

Python实现获得所有拼音为某个拼音的所有汉字

levosam 2023-04-03 原文

好久没有写博客了,这几年的开发让我感受良多,同时我也感觉到了我自己成长的还不够。所以,以后这里将会有我个人所有的项目经验总结,以及项目中使用到的一些方便的小工具也会写出来。

目录

前言

一、获取所有拼音为某个拼音的汉字。

二、拿到所有项目中的代码,并拷贝在同一份TXT文件当中

三、将连续的字符串改成一个字单独一行

总结



前言

随着项目的开发,项目上线审核的时候,最麻烦的一项:就是屏蔽词的审核,在这里我建议大家,如果项目中有修改昵称或者屏蔽非法文字的需求的话,一定要弄一个屏蔽词库,最好放在客户端。这个屏蔽词库里面要全部小写,然后玩家在修改昵称的时候,把大写转成小写。然后再进行屏蔽词对比。有时候,审核人员会有各种各样奇怪的需求。比如:所有拼音是wei或者是xin的汉字都不能出现。还有一些会让你给出所有的项目代码或者项目中的文字。我都遇到过,接下里给大家介绍我是怎么解决这些情况的


一、获取所有拼音为某个拼音的汉字。

这种情况是真的还好,但也着实EX。比如:所有拼音是wei和拼音是xin的汉字都不能出现(在不考虑声调的情况下)。这个难点有几个:

  1. 我怎么知道某个汉字的拼音是什么?
  2. 我怎么拿到所有的汉字

这里我推荐大家使用python来完成这项工程。

首先,需要大家先加载python中的拼音库,因为需要用这个来获取当前汉字的拼音

可以在在命令提示符中输入如下代码

pip install xpinyin

 然后回车,等待安装完毕。然后打开自己的编辑工具。下出以下代码,然后执行就可以获取到所有拼音是该拼音的汉字。代码如下:

from xpinyin import Pinyin
p = Pinyin()
def pinyin(word):
    # 转换,不显示声调,使用空格作为分隔符。
    ret = p.get_pinyin(word,tone_marks=None,splitter=' ')
    print(ret)

all_chiness = ""
for i in range(0x4e00,0x9fa6):
    str = chr(i)
    ret = p.get_pinyin(str,tone_marks=None,splitter=' ')
    if ret == "wei" :
        all_chiness += str

print(all_chiness)

执行结果如下:

 这样子我们就获取到了所有的拼音是wei的汉字,还不包括声调的。如果想要知道详细的xpinyin的用法。大家可以参考这个:

点击这里前往学习

二、将项目中所有的代码,拷贝在同一份TXT文件当中

这是要求你必须得把所有项目的代码拷贝到一个TXT文件中。二话不说,直接上代码

import os

class CopyScriptToTxt:
    def CopyFile(self,srcPath,destPath):
        src = open(srcPath,"r",encoding='UTF-8');
        dest = open(destPath,"a",encoding='UTF-8');

        for line in src:
            dest.write(line);

        dest.write('\n');
        src.close();
        dest.close();

tempCopy = CopyScriptToTxt();
# 项目代码所在总目录
g = os.walk(r"C:\Program Files\Games\FPS\Scripts")
# 目标文件,最好先创建好
setDestPath = r"C:\Users\Administrator\Desktop\temp.txt"

for path,dir_list,file_list in g:
    for file_name in file_list:
        filePath = os.path.join(path, file_name)
        print(filePath)
        tempCopy.CopyFile(filePath, setDestPath);

到此,执行该脚本,然后打开桌面上的temp文件,你就发现你所有的代码都在这里了。

三、将连续的字符串改成一个字单独一行

这里就要用到正则表达式了,就是匹配出所有的中文汉字。这里的难点并不是匹配汉字,而是怎么把匹配到的汉字分开。

这次我并没有用到Python,而是用到了Lua。

首先介绍以这个string.gmatch(全局模式)这个方法:创建并返回一个迭代器,可用于for语句中迭代的进行全局查找。迭代器每执行一次返回一个找到的字符串,如果在模式串中用圆括号指定的匹配分组,则返回值有多个分别对应各个匹配分组的捕获结果。分组可以相互嵌套,捕获结果返的顺序对应模式串中匹配分组的左圆括号出现的前后顺序。如果你希望第一个返回值是匹配结果的完整字符串,那么请将整个模式串包含在一对圆括号内。

接下来上代码:

local txt = ""
-- 这个str就是第一个获得的所有拼音为wei的汉字
local str = "微危委威巍薇偎蜲揻詴溦隈燰鰄崴縅揋覣楲隇喴煨鰃媙癓嶶葳愄蝛倭椳逶厃烓霺癐鳂嵔葨围唯维违为桅洈蓶壝溈違峞潿鍏帷爲隹撝矀鮠囲沩圩湋峗潙醀帏為闱惟琟韦囗欈維圍涠覹媁潍鄬嵬濰闈幃犩韋喡硙尾伪委伟纬萎苇偉愇玮葦骪儰撱痏薳鲔娓梶碨踓浘韑嵔瀢芛韪徫猥骩僞捼瓗蔿鮪暐硊诿寪洧緯隗崣濻艉韡廆煒荱颹偽捤瑋蒍骫唩斖痿諉媁椲磈鍡屗渨腲韙亹嶉炜頠未卫喂遗位味慰胃为畏谓猬魏蔚尉罻軎煟菋蘶鏏犚螱餵瓗褽鮇媦硙讏懀緭躛為苿藯爲蝟餧衞墛瞆讆磑躗渭轊熭蜼霨叞猚衛饖喡謂鳚新欣薪心辛锌芯俽盺妡邤惞鑫杺馫炘噺莘廞忻鋅昕馨歆噷嬜訢忄鈊枔鐔襑礥镡伈信衅芯脪釁伩馸孞焮軐顖囟憖舋訫阠愖"
for k, v in string.gmatch(str, "[%z\1-\127\194-\244][\128-\191]*") do
    txt = txt.."\n"..k
end
print(txt)

点击这里可以在线测试代码

总结

以上这些,都是作者在项目审核中遇到的情况,各有各的不同,各有各的操作。最后,希望审核人员、渠道客服以及技术人员不要天天五点钟下班吧!

有关Python实现获得所有拼音为某个拼音的所有汉字的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  4. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  5. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  6. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  7. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  8. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

随机推荐