用python开发文本翻译小软件
思路介紹
我們?cè)诠ぷ骰蛘呱钪杏袥](méi)有碰到這種情況,就是我們需要對(duì)內(nèi)容進(jìn)行翻譯,平時(shí)的時(shí)候我們是一句一句的粘貼翻譯后在粘貼回來(lái),針對(duì)這種情況 ,我們可以試著可以用代碼的方式幫我們進(jìn)行執(zhí)行。方便又快捷
首頁(yè),我們來(lái)設(shè)計(jì)軟件的開(kāi)發(fā)邏輯和思路,大致的思路是這樣的
既然這樣 ,那我們就按照我們前期的思路來(lái)寫(xiě)代碼,分步驟來(lái)實(shí)現(xiàn)這些功能,
一,分行讀取文本內(nèi)容:
這里我將代碼粘貼至下面,代碼會(huì)做注釋
nenr = input("輸入txt文件所在位置:") #將這里設(shè)置為用戶(hù)自動(dòng)輸入 a=[] with open(r"{}".format(nenr), "r") as f:for line in f.readlines(): #加入循環(huán),分行讀取文本內(nèi)的全部?jī)?nèi)容line = line.strip('\n') # 去掉列表中每一個(gè)元素的換行符,后續(xù)等內(nèi)容翻譯好后存入文本時(shí)需要再加上換行符,不然我們存入的數(shù)據(jù)會(huì)堆積在一起a.append(line) #將翻譯的內(nèi)容存入一個(gè)空的列表a print(a) #打印a的內(nèi)容執(zhí)行效果
????????
ok這里我們看到,這幾行代碼已經(jīng)講數(shù)據(jù)給提取出來(lái)了,以一個(gè)列表的方式給取出來(lái)了,其中,文本里的每一行的內(nèi)容就是列表里的一個(gè)元素,
二,將內(nèi)容分行提取后進(jìn)行翻譯并整理好我們需要的格式
? ? ? ? 我們將內(nèi)容翻譯出來(lái)后,這時(shí)就得想著,如何將內(nèi)容給翻譯好?這里我找到了一個(gè)第三方的翻譯api,api的信息我就不粘貼了,后續(xù)有想要的可以私信我。我們看下如何實(shí)現(xiàn)這一步驟,代碼如下:
import requestsnenr = input("輸入txt文件所在位置:") #將這里設(shè)置為用戶(hù)自動(dòng)輸入 a=[] with open(r"{}".format(nenr), "r") as f:for line in f.readlines(): #加入循環(huán),分行讀取文本內(nèi)的全部?jī)?nèi)容line = line.strip('\n') # 去掉列表中每一個(gè)元素的換行符,后續(xù)等內(nèi)容翻譯好后存入文本時(shí)需要再加上換行符,不然我們存入的數(shù)據(jù)會(huì)堆積在一起a.append(line) #將翻譯的內(nèi)容存入一個(gè)空的列表a b=[] #定義一個(gè)空列表b,這個(gè)列表是方便我們后續(xù)存入翻譯后的內(nèi)容 for x in a: #這里我們使用循環(huán),將存入數(shù)據(jù)的列表a給分步驟翻譯a_1 = requests.get(url="http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=""{}".format(x)) #通過(guò)循環(huán)將列表的數(shù)據(jù)逐個(gè)翻譯b.append(a_1.json()["translateResult"][0][0]["tgt"] + "\n") #這里將翻譯后的數(shù)據(jù)給提取出來(lái),然后將這個(gè)數(shù)據(jù)存入空列表b中,這里記得再存入的時(shí)候加上劃行符“\n” print(b) #查看我們翻譯后的內(nèi)容ok,我們來(lái)看下執(zhí)行效果
?
我們看到,這里我們已經(jīng)將內(nèi)容給翻譯好了,既然翻譯好了的話(huà),我們就可以把翻譯的內(nèi)容給替換掉文本里的內(nèi)容了
三,將翻譯后的數(shù)據(jù)替換掉之前的數(shù)據(jù)
? ? ? ? 既然翻譯好了,這時(shí)候我們就應(yīng)該把翻譯后的數(shù)據(jù)替換掉之前的數(shù)據(jù)才行,不讓我們這樣翻譯和直接手動(dòng)逐條翻譯有什么區(qū)別咧
import requestsnenr = input("輸入txt文件所在位置:") #將這里設(shè)置為用戶(hù)自動(dòng)輸入 a=[] with open(r"{}".format(nenr), "r") as f:for line in f.readlines(): #加入循環(huán),分行讀取文本內(nèi)的全部?jī)?nèi)容line = line.strip('\n') # 去掉列表中每一個(gè)元素的換行符,后續(xù)等內(nèi)容翻譯好后存入文本時(shí)需要再加上換行符,不然我們存入的數(shù)據(jù)會(huì)堆積在一起a.append(line) #將翻譯的內(nèi)容存入一個(gè)空的列表a b=[] #定義一個(gè)空列表b,這個(gè)列表是方便我們后續(xù)存入翻譯后的內(nèi)容 for x in a: #這里我們使用循環(huán),將存入數(shù)據(jù)的列表a給分步驟翻譯a_1 = requests.get(url="http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=""{}".format(x)) #通過(guò)循環(huán)將列表的數(shù)據(jù)逐個(gè)翻譯b.append(a_1.json()["translateResult"][0][0]["tgt"] + "\n") #這里將翻譯后的數(shù)據(jù)給提取出來(lái),然后將這個(gè)數(shù)據(jù)存入空列表b中,這里記得再存入的時(shí)候加上劃行符“\n” print(b) #查看我們翻譯后的內(nèi)容 file_handle = open(r"{}".format(nenr), mode='w') file_handle.writelines(b) #將集合b存入文本里 file_handle.close() #數(shù)據(jù)存入后關(guān)閉文本我們來(lái)看下執(zhí)行后的效果
?
?不錯(cuò)不錯(cuò),既然翻譯好了 我們何不再加上其他的一些優(yōu)化加強(qiáng)咧,比如 判斷是否選擇的是txt文件,或者是當(dāng)txt文件是否存在 或者 我們可以把代碼給打包成其他的一些內(nèi)容,既然有思路了,我們就開(kāi)始吧,
四,判斷用戶(hù)輸入的是否是txt文件
? ? ? ? 這里我們要想判斷用戶(hù)輸入的是不是txt文件時(shí),我們可以直接判斷后綴,如果用戶(hù)輸入的內(nèi)容的末尾沒(méi)有帶上 .txt 這時(shí),我們是否就可以判斷用戶(hù)輸入的不是txt文件。有思路就通過(guò)代碼實(shí)現(xiàn),代碼如下:
import osimport requestsnenr = input("輸入txt文件所在位置:") #將這里設(shè)置為用戶(hù)自動(dòng)輸入 a=[] accs = os.path.splitext(r"{}".format(nenr))[1] in ['.txt'] #這行代碼是將判斷用戶(hù)輸入的內(nèi)容末尾是否是.txt 如果是,則返回true if accs == True: #這里我們加入判斷,如果是返回的是true,則執(zhí)行正常的代碼:with open(r"{}".format(nenr), "r") as f:for line in f.readlines(): #加入循環(huán),分行讀取文本內(nèi)的全部?jī)?nèi)容line = line.strip('\n') # 去掉列表中每一個(gè)元素的換行符,后續(xù)等內(nèi)容翻譯好后存入文本時(shí)需要再加上換行符,不然我們存入的數(shù)據(jù)會(huì)堆積在一起a.append(line) #將翻譯的內(nèi)容存入一個(gè)空的列表ab=[] #定義一個(gè)空列表b,這個(gè)列表是方便我們后續(xù)存入翻譯后的內(nèi)容for x in a: #這里我們使用循環(huán),將存入數(shù)據(jù)的列表a給分步驟翻譯a_1 = requests.get(url="http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=""{}".format(x)) #通過(guò)循環(huán)將列表的數(shù)據(jù)逐個(gè)翻譯b.append(a_1.json()["translateResult"][0][0]["tgt"] + "\n") #這里將翻譯后的數(shù)據(jù)給提取出來(lái),然后將這個(gè)數(shù)據(jù)存入空列表b中,這里記得再存入的時(shí)候加上劃行符“\n”print(b) #查看我們翻譯后的內(nèi)容file_handle = open(r"{}".format(nenr), mode='w')file_handle.writelines(b) #將集合b存入文本里file_handle.close() #數(shù)據(jù)存入后關(guān)閉文本 else:print("請(qǐng)輸入正確的文件類(lèi)型") #當(dāng)用戶(hù)輸入的內(nèi)容不是txt文件時(shí),則給出用戶(hù)提示?我們來(lái)看下執(zhí)行后的效果:
?這里我們發(fā)現(xiàn)一個(gè)問(wèn)題,當(dāng)用戶(hù)執(zhí)行后,如果文件類(lèi)型不正確就直接停止掉了,這樣用戶(hù)就需要重輸入,對(duì)用戶(hù)很不友好,咋辦,我們加入循環(huán),當(dāng)用戶(hù)執(zhí)行成功后,代碼翻譯后,結(jié)束循環(huán),如果文件類(lèi)型不正確,那就重新循環(huán),順便,再給用戶(hù)執(zhí)行成功時(shí)加入一個(gè)提示
五,加入循環(huán),提升用戶(hù)體驗(yàn)
? ? ? ? ?這里我們加入循環(huán)操作,提示用戶(hù)體檢,然后再給執(zhí)行成功后加上提示,代碼如下
import osimport requests while True: #加入死循環(huán),當(dāng)翻譯成功后結(jié)束循環(huán),其他情況下一直循環(huán)nenr = input("輸入txt文件所在位置:") #將這里設(shè)置為用戶(hù)自動(dòng)輸入a=[]b = [] #定義一個(gè)空列表b,這個(gè)列表是方便我們后續(xù)存入翻譯后的內(nèi)容accs = os.path.splitext(r"{}".format(nenr))[1] in ['.txt'] #這行代碼是將判斷用戶(hù)輸入的內(nèi)容末尾是否是.txt 如果是,則返回trueif accs == True: #這里我們加入判斷,如果是返回的是true,則執(zhí)行正常的代碼:with open(r"{}".format(nenr), "r") as f:for line in f.readlines(): #加入循環(huán),分行讀取文本內(nèi)的全部?jī)?nèi)容line = line.strip('\n') # 去掉列表中每一個(gè)元素的換行符,后續(xù)等內(nèi)容翻譯好后存入文本時(shí)需要再加上換行符,不然我們存入的數(shù)據(jù)會(huì)堆積在一起a.append(line) #將翻譯的內(nèi)容存入一個(gè)空的列表afor x in a: #這里我們使用循環(huán),將存入數(shù)據(jù)的列表a給分步驟翻譯a_1 = requests.get(url="http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=""{}".format(x)) #通過(guò)循環(huán)將列表的數(shù)據(jù)逐個(gè)翻譯b.append(a_1.json()["translateResult"][0][0]["tgt"] + "\n") #這里將翻譯后的數(shù)據(jù)給提取出來(lái),然后將這個(gè)數(shù)據(jù)存入空列表b中,這里記得再存入的時(shí)候加上劃行符“\n”print(b) #查看我們翻譯后的內(nèi)容file_handle = open(r"{}".format(nenr), mode='w')file_handle.writelines(b) #將集合b存入文本里file_handle.close() #數(shù)據(jù)存入后關(guān)閉文本print("翻譯成功,請(qǐng)至文件夾內(nèi)查看") #翻譯成功后提示break #翻譯成功后結(jié)束循環(huán)else:print("請(qǐng)輸入正確的文件類(lèi)型") #當(dāng)用戶(hù)輸入的內(nèi)容不是txt文件時(shí),則給出用戶(hù)提示?執(zhí)行效果如下:
?這里我們看到,執(zhí)行效果不錯(cuò),既然這樣的話(huà),我們何不給代碼打過(guò)包,提升軟件的實(shí)用性,讓其他電腦上沒(méi)裝python的同事也能使用?
六,打包
這里我們使用的是python的打包模塊pyinstaller,我太餓了,打包模塊的使用方法我就不多說(shuō)了,后續(xù)有啥問(wèn)題或者其他情況可以私聊或者評(píng)論,我都會(huì)回復(fù)
打包代碼:pyinstaller -F -i acc.ico abcc.py
打包后的效果
執(zhí)行的效果:
?
?今天的趣味分享結(jié)束了,路過(guò)的點(diǎn)個(gè)關(guān)注哦 謝謝,后續(xù)如果碰到了有趣的軟件會(huì)在次分享
總結(jié)
以上是生活随笔為你收集整理的用python开发文本翻译小软件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 各纬度气候分布图_气候分布图纬度_世界气
- 下一篇: 测试理论基础