python批量翻译excel表格中的英文
python批量翻译excel表格中的英文
- 需求背景
- 主要设计
- 分析
- 具体实现
- 表格操作
- 请求百度翻译api
- 多线程
- 控制台显示进度
- 完整源码
需求背景
女朋友的论文需要爬取YouTube视频热评,但爬下来的都是外文。
主要设计
- 读取一个表格文件,获取需要翻译的文本
- 使用百度翻译 API 进行翻译,获取翻译结果
- 将翻译结果保存到原表格中,然后提取需要的列组成一个新的 DataFrame
- 处理多个表格文件,将它们的翻译结果分别保存
- 使用线程池加速翻译过程,可以同时翻译多个表格
- 显示进度条
分析
- 目标文件为xlsx格式,可以借助pandas进行读取文件和生成文件的操作。在这里我的源文件有若干列,其中第2列评论内容为我的目标列。
- 在这里我用的是百度翻译api接口。也可以googletrans、translate,这些库可以在本地使用,不需要申请API密钥,但是翻译质量和速度可能不如云服务。
- 由于我每个表格有2000行数据,总共有10个表格,一个个来的话不仅麻烦效率还低。
- 我需要知道任务的进度,不想一直等下去
具体实现
表格操作
def TranslateTable(sInputFilename, sOutputFilename):# 读取表格A并选择需要翻译的列df_a = pd.read_excel(sInputFilename) # 获取df对象df_a = df_a.iloc[:, [1, 2]] # iloc和loc很像,i=index,# 翻译英文列df_a['translation'] = df_a.iloc[:, 0].apply(Translate)# 创建表格B并保存df_b = pd.DataFrame({'原文': df_a.iloc[:, 0],'译文': df_a.iloc[:, 2]})df_b.to_excel(sOutputFilename, index=False)
请求百度翻译api
def Translate(sText, from_lang='en', to_lang='zh'):appid = 'xxxxxx'secret_key = 'xxxxxx'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 Nonereturn result['trans_result'][0]['dst']
多线程
使用concurrent.futures库中的 ThreadPoolExecutor类来实现多线程处理。
- 创建一个 ThreadPoolExecutor对象。
- 在循环中遍历每个表格A,并使用 submit方法向线程池提交任务。 submit方法将表格A的文件名和表格B的文件名作为参数传递给 translate_column函数,该函数将在单独的线程中执行。
ThreadPoolExecutor会自动管理线程池的大小,并在有空闲线程时分配新任务。这种方式可以利用多个CPU核心来并行处理多个表格,提高处理速度。
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)):pass
控制台显示进度
使用 concurrent.futures.as_completed 函数显示进度条。
完整源码
# -*- coding: utf-8 -*-
# time: 2022/2/17 03:06
# file: test.py
# author: Shi Yasong"""
主要功能功能:1、读取一个表格文件,获取需要翻译的文本。2、使用百度翻译 API 进行翻译,获取翻译结果。3、将翻译结果保存到原表格中,然后提取需要的列组成一个新的 DataFrame。4、处理多个表格文件,将它们的翻译结果合并到一个 DataFrame 中,然后分别保存。5、使用线程池加速翻译过程,可以同时翻译多个表格6、使用 concurrent.futures.as_completed 函数显示进度条。
"""from concurrent.futures import ThreadPoolExecutor, as_completed
from tqdm import tqdm # 进度条库,需要先安装import pandas as pd
import requests
import json
import os
import hashlib
import randomdef Translate(sText, from_lang='en', to_lang='zh'):appid = 'xxxx'secret_key = 'xxxxx'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 Nonereturn result['trans_result'][0]['dst']def TranslateTable(sInputFilename, sOutputFilename):# 读取表格A并选择需要翻译的列df_a = pd.read_excel(sInputFilename) # 获取df对象df_a = df_a.iloc[:, [1, 2]] # iloc和loc很像,i=index,# 翻译英文列df_a['translation'] = df_a.iloc[:, 0].apply(Translate)# 创建表格B并保存df_b = pd.DataFrame({'原文': df_a.iloc[:, 0],'译文': df_a.iloc[:, 2]})df_b.to_excel(sOutputFilename, index=False)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)):pass# 调用函数翻译多个表格
sInputFolder = r'C:\Users\lenovo\Desktop\english' # 修改为实际的表格文件夹路径
sOutputFolder = r'C:\Users\lenovo\Desktop\zh' # 修改为实际的表格文件夹路径
TranslateTables(sInputFolder, sOutputFolder)
相关文章:
python批量翻译excel表格中的英文
python批量翻译excel表格中的英文需求背景主要设计分析具体实现表格操作请求百度翻译api多线程控制台显示进度完整源码需求背景 女朋友的论文需要爬取YouTube视频热评,但爬下来的都是外文。 主要设计 读取一个表格文件,获取需要翻译的文本 使用百度翻译…...

基于SSM框架的RBAC权限系统设计与 实现
基于SSM框架的RBAC权限系统设计与 实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景…...

目标检测各常见评价指标详解
注:本文仅供学习,未经同意请勿转载 说明:该博客来源于xiaobai_Ry:2020年3月笔记 对应的PDF下载链接在:待上传 目录 常见的评价指标 准确率 (Accuracy) 混淆矩阵 (Confusion Matrixÿ…...
深入讲解Kubernetes架构-控制器
在机器人技术和自动化领域,控制回路(Control Loop)是一个非终止回路,用于调节系统状态。这是一个控制环的例子:房间里的温度自动调节器。当你设置了温度,告诉了温度自动调节器你的期望状态(Desi…...
Urho3D本地化 国际化
本地化子系统提供了创建多语言应用程序的简单方法。 初始化 在使用子系统之前,需要加载本地化字符串集合。通常的做法是在应用程序启动时执行此操作。可以加载多个集合文件,每个集合文件只能定义一种或多种语言。例如: Localization* l10n…...

千锋教育嵌入式物联网教程之系统编程篇学习-04
目录 alarm函数 raise函数 abort函数 pause函数 转折点 signal函数 可重入函数 信号集 sigemptyset() sigfillset sigismember() sigaddset() sigdelset() 代码讲解 信号阻塞集 sigprocmask() alarm函数 相当于一个闹钟,默认动作是终止调用alarm函数的进…...
【运维】什么是 DevOps?
文章目录什么是 DevOps?如何实现 DevOpsDevOps工作原理: DevOps生命周期DevOps 文化DevOps 工具:构建 DevOps 工具链DevOps 和云原生开发什么是 DevSecOps?DevOps 和站点可靠性工程 (SRE)什么是 DevOps? DevOps 通过结…...

【C++入门】引用、内联函数、auto关键字、基于范围的for循环(C++11)、指针空值nullptr(C++11)
文章目录引用引用概念引用特性引用使用场景常引用内联函数宏的优缺点?C有哪些技术替代宏?auto关键字auto不能推导的场景基于范围的for循环(C11)指针空值nullptr(C11)引用 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名&…...

《FPGA学习》->多个按键控制LED灯
🍎与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。本次项目任务,利用开发板上的4个按键KEY1,KEY2,KEY3,KEY4和2个LED灯LED1&…...
vb.net计算之.net core基础(4)-项目与程序结构(2)
目录 Namespace 语句Visual Basic 中的命名空间完全限定名命名空间可以定义什么全局关键字命名规范条件编译拆分和合并语句拆分成多行在同一行上放置多个语句为代码行添加标签注释串联成员访问运算符点运算符 `.`感叹号 `!`运算符Me 关键字MyMyBaseMyClassNamespace 语句 <…...

基于RK3588的嵌入式linux系统开发(五)——uboot优化修改(按任意按键停止autoboot)
我们通常情况下,芯片进入uboot后,会根据设置的bootdelay时间进行倒数计数。这时候在终端按任意键,即可退出autoboot,进入uboot的命令行模式。 官方提供的uboot源码中,为了防止调试串口干扰导致不能进入系统,…...
Lumerical---在FDTD和MODE工程中的PML边界条件
Lumerical---在FDTD和MODE工程中的PML边界条件 引言PML边界条件实现原理PML 类型PML 配置文件PML 配置文件选项Standard(标准)Stabilized(稳定性)Steep AngleCustom(陡角)对于不同的边界使用不同的配置FDE,varFDTD和FDTD SolverPML 参数阅读这篇前,推荐阅读边界条件综述…...

论文投稿指南——中文核心期刊推荐(社会学)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
KVM-4、KVM 高级功能详解
1. 半虚拟化驱动 1.1 virtio 概述 KVM 是必须使用硬件虚拟化辅助技术(如 Intel VT-x 、AMD-V)的 Hypervisor,在CPU 运行效率方面有硬件支持,其效率是比较高的;在有 Intel EPT 特性支持的平台上,内存虚拟化的效率也较高。 QEMU/KVM 提供了全虚拟化环境,可以让客户机不经…...

【Linux】进程状态
文章目录1. 阻塞1. 举例2. 为什么要阻塞?3.操作系统层面上如何理解进程等待某种资源就绪呢?资源进程4. 总结2.挂起3.Linux进程状态1. R状态进程只要是R状态,就一定是在CPU运行吗?证明当前进程运行状态生成程序查看进程2. S休眠状态…...

2023河南省第二届职业技能大赛郑州市选拔赛“网络安全”项目比赛样题任务书
2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书 一、竞赛时间 共计360分钟。 竞赛任务书内容 2023河南省第二届职业技能大赛郑州市选拔赛“网络安全” 项目比赛样题任务书 A模块基础设施设置/安全加固(200分) A-1&…...

pygame8 扫雷游戏
一、游戏规则: 1、点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利 2、如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷 二、游戏主逻辑: 主要逻辑即调用run_game, 然后循环检测事件…...

c/c++开发,无可避免的模板编程实践(篇四)
一、容器与模板 前文就说到,标准库基于模板编程,定义了许多容器类以及一系列泛型算法,使程序员可以更简洁、抽象和有效地编写程序。C标准库中有大量的标准容器,这些容器通常包含一组数据或对象的集合,几乎可以和任何类…...

c++11 标准模板(STL)(std::unordered_set)(二)
定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…...

GEE学习笔记 七十二:【GEE之Python版教程六】命令行简介
这篇开始就要讲解GEE相关的内容,首先聊一下命令行的内容,这个在官方文档中有详细的介绍,这里我简单说一下常用的几个命令,剩余的大家在使用过程中如果又需要可以随时查看相关官方文档的介绍。官方文档地址:https://dev…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...