python3 实现对代码文件中注释的翻译

心血来潮,昨天看见群里讨论一段图片转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,就可以实现了。

原文地址:https://www.cnblogs.com/bingoTest/p/10689432.html

时间: 2024-08-11 09:49:32

python3 实现对代码文件中注释的翻译的相关文章

UINavigationBar的translucent属性在头文件中注释的翻译

先吐槽一下,apple的注释写得挺绕的,一大堆的后置定语. translucent iOS7下具有新的行为. 你可以通过设置这个属性为NO,强制背景为不透明. 如果导航栏的背景图为自定义,其默认值将从背景图的alpha值推断而来, 背景图只要有一个像素的alpha值<1.0,则translucent的值推断为YES. 如果设置translucent为YES,而自定义背景图不透明. 则会给图片加上一个小于1.0的系统预定义的透明度. 如果translucent置为NO,而自定义的背景图为半透明,

FreeMarker模版文件中注释方法

旧版本的freemarker采用的是<#comment> 注释 </#comment>方法现在常用注释:<#--注释内容--> FreeMarker模板文件主要由如下4个部分组成:1.文本:直接输出的部分2.注释:<#-- ... -->格式部分,不会输出3.插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出4.FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出

统计代码文件中的实际有效行数,去掉空行、单行注释、多行注释

#coding=gbk import os #rootdir='f:\\pylianxi' def count_line_core(file_name): ##传入单个文件,统计行数,之后返回该文件的实际代码行数:区分utf-8.gbk有待优化 print('core_file_name:',file_name) lines_count=0 flag=True try: with open(file_name,'r',encoding='gbk') as fp: print('gbk file_

提取c#代码文件中的方法块

   此方法是取C#文件里面的方法块,并删除缩进符,感觉写得还是比较容易懂的,所以收藏下,以便将来用到. private static string GetCodeBlock(string allCode, string blockName) { int blockStart = allCode.IndexOf(blockName, StringComparison.OrdinalIgnoreCase); if (blockStart == -1) return "// " + blo

VS代码文件中添加协议格式

//数据帧格式如下 //+-------+-------+-------+-------+---------+------+-------+ //|包头(2)|地址(1)|功能(1)|长度(1)|数据包(n)|CRC(2)|包尾(2)| //+-------+-------+-------+-------+---------+------+-------+ //长度,以长度后面第一个字节为起始,CRC最后一个字节为终止的字节数

C语言开发过程中目标代码文件、可执行文件和库

一.C程序开发的一般流程 1:定义程序的目标,明确程序的功能,明确程序中需要哪些信息.计算和控制,明确程序中应该报告什么信息,不会设计到具体的计算机语言,对于问题的描述一般用的是术语: 2:设计程序,考虑如何通过程序实现程序的目标,具体一点说,需要考虑的可以有用户界面的设计.程序的组织.目标用户的确定以及程序开发时间计划,除了这些,好需要确定是在程序中(也有可能是在辅助文件中)数据的表示形式以及数据的处理方法.这个阶段,不会用到具体的代码.问题的描述用的是一般术语,但是不排除某些决策会和具体的语

怎样批量删除PDF文件中的注释

日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释? 操作教程: 1.首先我们点击安装在电脑上的PDF编辑器,运行程序,我在看见软件界面之后,我们点击软件界面的"打开"选项.添加并打开我们需要进行编辑的PDF文件. 2.PDF文件打开以后,在软件的工具栏里找到"注释"按钮,单击按钮,会弹出一个下拉框,然后选择"显示注释列表&qu

001-目标代码文件、可执行文件和库

C编程的基本策略是使用程序将源代码文件转换为可执行文件.C分两步完成这一工作:编译和链接. 编译器将源代码转换为中间代码,链接器将此中间代码与其他代码结合起来生成可执行文件. 中间文件的形式有多选择.最一般的选择是将源代码转换为机器语言代码,将其结果放置在一个目标代码文件中. 目标代码文件缺少的元素:启动代码:库例程代码 链结器的作用是将目标代码,系统的标准启动代码和库代码结合在一起,形成可执行文件.

C基础——目标代码文件、可执行文件和库

目标代码文件.可执行文件和库 C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码.C分两步完成这一工作:编译和链接.编译器将源代码转换为中间代码,链接器将此中间代码与其他代码相结合来生成可执行文件.C使用被划分为两部分的这一方法使程序便于模块化.我们可以分别编译各个模块,然后使用链接器将编译过的模块结合起来.这样,如果需要改变一个模块,则不必重新编译所有其他模块.同时,链接器将自己的程序与预编译的库代码结合起来. 中间文件的形式有多种选择.最一般的选这,同时