朋友需要翻译大量Excel文件内容,看我是否能搭把手,我的思路很简单,就是将Excel文件内容读出后,调用翻译软件的API,然后再爬回翻译好的内容,写入Excel。
读取Excel文件内容的方法:我这里要处理的是 .xlsx文件,可以import openpyxl,如果要处理.xls文件,就不能用这个,而是import xlrd,或者先将.xks文件转为.xlsx文件再使用本文代码。具体这两个包提供的方法是如何操作Excel文件的,自行百度查看其使用文档就一眼明了了。
调用API:调用百度翻译API,可进入“百度翻译开放平台”进行用户注册,和申请使用。免费的标准版就够用,只是限制每秒最多只能访问一次。(但是免费真香= =)。
申请完后就会有自己的APP ID 和秘钥,这是访问百度翻译API时必须发送的参数。想具体知道如何使用翻译API,它的接入方式,地址,参数等等,可参考“通用翻译API接入文档”
下面逐部分放出全部代码:
mport hashlib import random import openpyxl from openpyxl import Workbook import requests import time
引入time是因为,免费版的API限制每秒只能访问一次,如果不做停顿,结果会有很多空白= =
apiurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate' appid = '输入自己的APP ID' secretKey = '输入自己的秘钥'
APP ID 和 秘钥 在“百度翻译开放平台”上注册完就能得到。
def translateBaidu(content, fromLang='en', toLang='zh'): salt = str(random.randint(32768, 65536)) sign = appid + content + salt + secretKey sign = hashlib.md5(sign.encode("utf-8")).hexdigest() try: paramas = {
'appid': appid, 'q': content, 'from': fromLang, 'to': toLang, 'salt': salt, 'sign': sign } response = requests.get(apiurl, paramas) jsonResponse = response.json() dst = str(jsonResponse["trans_result"] [0]["dst"]) return dst except Exception as e: print(e)
这是从Excel得到翻译内容后,构造相应的请求参数,然后发送至百度翻译API,并将其翻译结果,以Json的格式获取,并剥离出来。这些参数的设计和Json结果的剥离,都可以直接从“通用翻译API接入文档”里得知。
def excelTrans(srcFilename=r'c:\Users\Administrator\Desktop\source.xlsx', desFilename=r'c:\Users\Administrator\Desktop\result.xlsx', srcSheet='Sheet1', desSheet='result1'): wb = openpyxl.load_workbook(srcFilename) ws = wb[srcSheet] wb2 = Workbook() ws2 = wb2.create_sheet(title=desSheet) for i in range(1, 需要翻译的那一列的行数+1): b = ws.cell(row=i, column=1).value print(str(b)) result = translateBaidu(str(b)) ws2.cell(row=i, column=1).value = str(result) time.sleep(1) wb2.save(desFilename)
srcFilename要填需要翻译的Excel文件路径,destFilename填翻译后生成的文件路径,srcSheet为需要翻译Excel文件里的哪一个表,desSheet表示在Excel文件里生成的表名。
if __name__ == '__main__': print('start translating...') excelTrans() print('ending...')
代码全连起来后可用,也可根据自己的需要进行更改,比如需要翻译的源语种和目标语种可通过查 百度翻译API的开发文档更改参数;对于Excel文件的操作,则直接看openpyxl的文档或者网上总结它的常用方法,就可灵活运用了。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232524.html原文链接:https://javaforall.net
