1. 程式人生 > >python3 實現對代碼文件中註釋的翻譯

python3 實現對代碼文件中註釋的翻譯

tran color def 是否 進行 salt one 註釋 改變

心血來潮,昨天看見群裏討論一段圖片轉pdf的代碼,直接拿過來發現不能用,原來是因為代碼中傳的文件對象不對,源碼中說傳遞的是一個文件路徑或一個文件對象。他傳的是一個文件名,很是尷尬。

想了想,主要原因還是因為很多人不看源碼,看了源碼經常因為大段的註釋英文看不懂,很是尷尬。

然後想了想,是否可以寫一個翻譯功能對源碼進行翻譯。功能實現,代碼如下:

翻譯中文的代碼(使用有道翻譯= =):

 1     def fanyi_youdao(self,content):
 2             url = http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
3 data = {} 4 data[i] = content 5 data[to] = AUTO 6 data[smartresult] = dict 7 data[client] = fanyideskweb 8 data[salt] = 1517200217152 9 data[sign] = fc8a26607798294e102f7b4e60cc2686
10 data[doctype] = json 11 data[version] = 2.1 12 data[keyfrom] = fanyi.web 13 data[action] = FY_BY_CLICKBUTTION 14 data[typoResult] = true 15 data = urllib.parse.urlencode(data).encode(utf-8) 16 req = urllib.request.Request(url, data)
17 req.add_header(User-Agent, 18 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36) 19 response = urllib.request.urlopen(req) 20 html = response.read().decode(utf-8) 21 22 target = json.loads(html) 23 sumString = ‘‘ 24 for i in target[translateResult]: 25 for j in i: 26 if(j[tgt]!=None): 27 sumString+=j[tgt]+\n 28 return sumString

最後有個小坑,經過json.loads轉換後需要查看一下返回過來的值,因為target中翻譯內容返回過來的list或dict不同,需要根據實際情況改變,其他的都是request的簡單應用。

下面是替換翻譯並復制出一個文件:

 1     def del_zs(self):
 2         with open(r"G:\re.py", "r") as file:
 3             file_read = file.read()
 4             en_content = re.findall(""".*?""", file_read, re.S)
 5             new_file_read = file_read
 6             for i in en_content:
 7                 with open(r"G:\re_cn1.py","w+",encoding=UTF-8) as new_file:
 8                     new_file_read = new_file_read.replace(i, """\n + self.fanyi_youdao(i.replace(\n, ‘‘)).strip().strip("“”") + \n""")
 9                     new_file.write(new_file_read)
10             return en_content

這裏是用到了python3中的re模塊,思路就是使用正則匹配被"""夾著的內容(也就是註釋),然後翻譯內容(因為re匹配過來的內容是一個list所以就直接用for循環這個list)然後利用strip對中文翻譯過來的引號進行刪除,再加上英文的三引號。然後將翻譯過來的內容利用list進行逐個replace,就可以實現了。

python3 實現對代碼文件中註釋的翻譯