我们在工作中可以会遇到需要对excel表格中的某一列进行一一翻译的类似情况。如果翻译数量比较少,直接手工复制到某词霸或某道就可以了,但是,如果是几千或几万的量级,手工复制粘贴会浪费很多时间。例如假设有一万条待翻译对象,你以上面的方式可以做到每秒钟一条,那么时间消耗是10000秒约合2.8个小时,而我通过调用百度云api进行翻译,我只是需要等待10000/10/3600=0.28小时,可以带来10倍的效率。

话不多说,先放出所有代码:

# 首先导入所有需要用到的类库
import time
import pandas as pd
import hashlib
import json
import random
import requests
from retry import retry
# 准备api参数
url = "http://api.fanyi.baidu.com/api/trans/vip/translate"
appid = '202003100003960461'  # 你的appid
secretKey = 'IEQIchTbpzUNK6TWxmmm1'  # 你的密钥
salt = random.randint(32768, 65536)
# 使用函数封装过程
def get_tra_res(q, fromLang='zh', toLang='en'):
    # 生成签名
    sign = appid + q + str(salt) + secretKey
    sign = hashlib.md5(sign.encode()).hexdigest()
# post请求参数
    data = {
        "appid": appid,
        "q": q,
        "from": fromLang,
        "to": toLang,
        "salt": str(salt),
        "sign": sign,
    }
# post请求
    res = requests.post(url, data=data)
# 返回时一个json
    try:
        trans_result = json.loads(res.content).get(
            'trans_result')[0].get("dst")
    except:
        trans_result = 'N/A'
    return trans_result
# 使用pandas读取Excel
df = pd.read_excel('0410.xlsx', sheet_name='Sheet1')
# 封装翻译过程
def trans(key):
    time.sleep(0.15)
    print(get_tra_res(key))
    return get_tra_res(key)
# df['自动翻译'] = df.名称[1212:].apply(lambda x: trans(x))
# df.to_excel('result.xlsx')</pre>