Python调用百度翻译API翻译excel中的所有英文(无翻译上限) 您所在的位置:网站首页 uncopyrightable百度翻译 Python调用百度翻译API翻译excel中的所有英文(无翻译上限)

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

2024-05-31 12:03| 来源: 网络整理| 查看: 265

目录

第一节:导入库并设置 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)      

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有