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…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
