Python调用百度翻译API翻译excel中的所有英文(无翻译上限)

目录

第一节:导入库并设置 API 凭证

第二节:翻译功能

第三节:文本翻译功能

第四节:表翻译功能

第五节:文件夹翻译功能

第五节:代码总结

第六节:百度翻译API申请流程

重点:完整程序如下

     


帮女朋友(玲儿)处理数据时写的表格数据翻译代码哈哈(可以实现多个excel同时翻译,而且不限制字符数量)

第一节:导入库并设置 API 凭证


本部分包括导入所需的库并设置翻译 API 的凭据。导入的库concurrent.futures用于并发执行、tqdm进度条可视化、pandas数据操作、requests发出 HTTP 请求、jsonJSON 处理、os操作系统相关功能、hashlib生成 MD5 哈希以及random生成随机数。API 凭证appid和secret_key需要填写适当的值。

from concurrent.futures import ThreadPoolExecutor, as_completed
from tqdm import tqdm
import pandas as pd
import requests
import json
import os
import hashlib
import random
import time


第二节:翻译功能


本节定义了Translate函数,该函数接受要翻译的文本以及源语言和目标语言。它使用百度翻译 API 来执行翻译。该函数生成随机 salt 值,使用提供的 appid、text、salt 和 Secret_key 计算符号,并向翻译 API 发送 GET 请求。然后解析响应,并返回翻译后的文本。

def Translate(sText, from_lang='en', to_lang='zh'):
    appid = '' # 改的第一个地方,自己的API唔
    secret_key = '' 
    url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
    salt = random.randint(32768, 65536)
    sign = hashlib.md5((appid + sText + str(salt) + secret_key).encode()).hexdigest()
    params = {
        'q': sText,
        'from': from_lang,
        'to': to_lang,
        'appid': appid,
        'salt': salt,
        'sign': sign
    }
    response = requests.get(url, params=params)
    result = json.loads(response.content.decode())
    if result.get('error_code') is not None:
        return None
    return result['trans_result'][0]['dst']


第三节:文本翻译功能


本节定义了该TranslateText函数,该函数将文本作为输入并将其分割成更小的块以符合 API 的最大字符限制。它调用Translate每个块的函数并收集翻译。在请求之间添加 1 秒的延迟,以遵守 API 的速率限制。该函数返回串联的翻译。

def TranslateText(text):
    max_length = 5000  # 每个请求的最大字符数
    text_length = len(text)
    translations = []
    for i in range(0, text_length, max_length):
        sub_text = text[i:i + max_length]
        translation = Translate(sub_text)
        translations.append(translation if translation is not None else '')
        time.sleep(1)  # 添加延迟,遵守百度翻译API的访问频率限制
    return ''.join(translations)


第四节:表翻译功能


本节定义了TranslateTable函数,该函数采用输入文件名和输出文件名。它使用列读取 Excel 文件pd.read_excel并对其进行迭代。对于每一列(“翻译”列除外),它应用该TranslateText函数来翻译该列中的文本。翻译结果存储在附加“_翻译”(翻译)后缀的新列中。最后,将翻译后的DataFrame保存为Excel文件。

def TranslateTable(sInputFilename, sOutputFilename):
    df_a = pd.read_excel(sInputFilename)
    for col in df_a.columns:
        if col != '原文':
            df_a[col + '_翻译'] = df_a[col].apply(lambda x: TranslateText(str(x)) if isinstance(x, str) else '')
    df_a.to_excel(sOutputFilename, index=False)
    return df_a


第五节:文件夹翻译功能


本节定义了该TranslateTables函数,该函数采用输入文件夹和输出文件夹。它从输入文件夹中检索输入文件名列表,过滤扩展名为“.xlsx”的文件。使用 a ThreadPoolExecutor,它为每个输入文件提交要同时执行的翻译任务。输出文件以“_翻译结果.xlsx”后缀保存在输出文件夹中。使用跟踪任务的进度tqdm,完成后会打印一条消息,指示所有输出均已生成。

def TranslateTables(sInputFolder, sOutputFolder):
    sInputFilenames = [os.path.join(sInputFolder, f) for f in os.listdir(sInputFolder) if f.endswith('.xlsx')]
    with ThreadPoolExecutor() as executor:
        lstFutures = []
        for sInputFilename in sInputFilenames:
            sFilename = os.path.splitext(os.path.basename(sInputFilename))[0]
            sOutputFilename = os.path.join(sOutputFolder, sFilename + '_翻译结果.xlsx')
            lstFutures.append(executor.submit(TranslateTable, sInputFilename, sOutputFilename))
        for future in tqdm(as_completed(lstFutures), total=len(lstFutures)):
            df_result = future.result()
        print(f'已经全部输出完成啦!!!')
sInputFolder = r'C:\Users\aa\Desktop\cc' # 改的第二个地方,文件夹位置唔
sOutputFolder = r'C:\Users\aa\Desktop\bb' # 改的第二个地方
TranslateTables(sInputFolder, sOutputFolder)


第五节:代码总结


功能:
该程序使用百度翻译 API 将文本从一种语言翻译成另一种语言。
它支持批量翻译指定输入文件夹内的多个Excel文件。
它将文本分割成更小的块以符合 API 的字符限制,并单独处理每个块的翻译。
该程序将翻译结果添加为 Excel 文件中的新列,并将其保存在指定的输出文件夹中。
它使用多线程来ThreadPoolExecutor并发执行翻译任务,通过利用多个线程来提高性能。
优点:
易于使用:该程序提供了一种简单的方法来翻译 Excel 文件中的文本,而无需广泛的编码知识。
批处理:该程序支持批处理,允许用户一次性翻译多个Excel文件。
并发执行:通过利用多线程,程序可以同时执行多个翻译,从而提高效率并减少总体执行时间。
进度跟踪:该tqdm库提供进度条,使用户可以了解翻译进度并估计剩余时间。
错误处理:程序处理翻译 API 返回的错误,并确保任何未翻译的文本都被替换为空字符串。
灵活性:该程序允许用户指定源语言和目标语言,使其适应各种翻译需求。
总体而言,该程序提供了一种使用百度翻译 API 翻译 Excel 文件中的文本的便捷高效的方法,它可以自动执行多个文件的翻译过程,并通过利用并发执行来提高生产力。

第六节:百度翻译API申请流程

网站:百度翻译开放平台

在里面可以免费申请高级版API,然后启用通用文档翻译API如下(注意:每人每月免费100万字符上限),在右侧总览功能底部可以找到APP ID和密钥,放入程序使用即可:

重点:完整程序如下

from concurrent.futures import ThreadPoolExecutor, as_completed
from tqdm import tqdm
import pandas as pd
import requests
import json
import os
import hashlib
import random
import time

def Translate(sText, from_lang='en', to_lang='zh'):
    appid = ''    # 改的第一个地方,自己的百度翻译API唔
    secret_key = '' 
    url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
    salt = random.randint(32768, 65536)
    sign = hashlib.md5((appid + sText + str(salt) + secret_key).encode()).hexdigest()
    params = {
        'q': sText,
        'from': from_lang,
        'to': to_lang,
        'appid': appid,
        'salt': salt,
        'sign': sign
    }
    response = requests.get(url, params=params)
    result = json.loads(response.content.decode())
    if result.get('error_code') is not None:
        return None
    return result['trans_result'][0]['dst']

def TranslateText(text):
    max_length = 5000  # 每个请求的最大字符数
    text_length = len(text)
    translations = []
    for i in range(0, text_length, max_length):
        sub_text = text[i:i + max_length]
        translation = Translate(sub_text)
        translations.append(translation if translation is not None else '')
        time.sleep(1)  # 添加延迟,遵守百度翻译API的访问频率限制
    return ''.join(translations)

def TranslateTable(sInputFilename, sOutputFilename):
    df_a = pd.read_excel(sInputFilename)
    for col in df_a.columns:
        if col != '原文':
            df_a[col + '_翻译'] = df_a[col].apply(lambda x: TranslateText(str(x)) if isinstance(x, str) else '')
    df_a.to_excel(sOutputFilename, index=False)
    return df_a


def TranslateTables(sInputFolder, sOutputFolder):
    sInputFilenames = [os.path.join(sInputFolder, f) for f in os.listdir(sInputFolder) if f.endswith('.xlsx')]
    with ThreadPoolExecutor() as executor:
        lstFutures = []
        for sInputFilename in sInputFilenames:
            sFilename = os.path.splitext(os.path.basename(sInputFilename))[0]
            sOutputFilename = os.path.join(sOutputFolder, sFilename + '_翻译结果.xlsx')
            lstFutures.append(executor.submit(TranslateTable, sInputFilename, sOutputFilename))
        for future in tqdm(as_completed(lstFutures), total=len(lstFutures)):
            df_result = future.result()
        print(f'已经全部输出完成啦!!!')
sInputFolder = r'C:\Users\aa\Desktop\cc' # 改的第二个地方,文件夹位置,是文件夹位置哈
sOutputFolder = r'C:\Users\aa\Desktop\bb' # 改的第二个地方
TranslateTables(sInputFolder, sOutputFolder)




     

   如有不足,欢迎留言指正哈

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用百度翻译API,您需要先在百度翻译开放平台注册并创建一个应用程序,然后获取应用程序的APP ID和密钥。 接着,在Python调用百度翻译API接口需要使用requests库,以下是一个示例代码: ```python import requests import json url = 'https://fanyi.baidu.com/v2transapi' app_id = 'your app id' secret_key = 'your secret key' def translate(text, from_lang, to_lang): data = { 'from': from_lang, 'to': to_lang, 'query': text, 'transtype': 'translang', 'simple_means_flag': '3', 'sign': '', 'token': '', } sign = app_id + text + str(1435660288) + secret_key sign = hashlib.md5(sign.encode()).hexdigest() data['sign'] = sign data['token'] = 'e8c37d1a59fdefa0e7e9e012c2261f48' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Referer': 'https://fanyi.baidu.com/', 'Origin': 'https://fanyi.baidu.com', 'Host': 'fanyi.baidu.com', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6', 'Cookie': 'BAIDUID=your Baidu ID', } response = requests.post(url, headers=headers, data=data) content = json.loads(response.text) return content['trans_result']['data'][0]['dst'] ``` 在上面的代码,您需要将“your app id”和“your secret key”替换为您自己的百度翻译应用程序的APP ID和密钥。还需要将“your Baidu ID”替换为您自己的百度ID。 然后,您可以调用“translate”函数并传递要翻译的文本,源语言和目标语言作为参数。例如: ```python text = 'Hello, World!' from_lang = 'en' to_lang = 'zh' translation = translate(text, from_lang, to_lang) print(translation) ``` 这将输出“你好,世界!”(Hello, World!的翻译)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~玲儿响叮当~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值