Python 调用免费的百度翻译接口 翻译excel文档中的英文成中文

2023-12-04

# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: JHC
@license: None
@contact: JHC000abc@gmail.com
@file: get_coogle_translate_results.py
@time: 2022/11/12/ 22:12
@desc:
"""
import os
import requests
import json
import xlsxwriter
import xlrd
import time
import random


class Translation():
    """

    """

    def parse_streaming_data(self, data, question):
        for line in data.split('\n'):
            if line.strip():
                if line.startswith("data: "):
                    message = json.loads(line.replace("data: ", ""))
                    event = message["data"]["event"]
                    if event == "Translating":
                        question = message["data"]["list"][0]["src"]
                        answer = message["data"]["list"][0]["dst"]
                        # print("{} : {}".format(question,answer))
                        return {
                            "question": question,
                            "answer": answer
                        }

        return {
            "question": question,
            "answer": "翻译失败"
        }

    def translate(self, question):
        tran_result = {
            "question": question,
            "answer": "翻译失败"
        }
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
        }

        url = "https://fanyi.baidu.com/ait/text/translate"
        data = {
            "query": "{}".format(question),
            "from": "en",
            "to": "zh",

        }
        try:
            response = requests.post(url, headers=headers, json=data)
            # print(response.text)
            tran_result = self.parse_streaming_data(response.text, question)
        except BaseException:
            pass

        time.sleep(random.randint(10, 20))
        return tran_result

    def read_yield(self, file: str, headers: list = None, sheets: list = None):
        """
        按行读取excel
        :param file:
        :param headers:[[],[]]每个sheet对应一个header
        :param encoding:
        :param spliter:
        :param sheets:
        :return:
        """
        data = xlrd.open_workbook(file)
        if not sheets:
            sheets = data.sheet_names()
        for index, sheet in enumerate(sheets):
            table = data.sheet_by_name(sheet)
            nrows = table.nrows
            # 传headers进来从第1行开始算,不传从第2行开始算
            if not headers:
                header = table.row_values(0)
                start = 1
            else:
                header = headers[index]
                start = 0
            num = 0
            for row in range(start, nrows):
                info = []
                for i in table.row_values(row):
                    if isinstance(i, str):
                        info.append(i)
                    else:
                        if str(i).endswith(".0"):
                            info.append(str(int(i)))
                        else:
                            info.append(str(i))
                num += 1

                yield {
                    "sheet": sheet,
                    "headers": header,
                    "num": num,
                    "line": info,
                }

    def write(self, file: str, data, headers, sheets):
        workbook = xlsxwriter.Workbook(file)
        for index, sheet in enumerate(sheets):
            worksheet = workbook.add_worksheet(sheet)
            data.insert(0, headers[0])
            for row, lis in enumerate(data):
                for col, val in enumerate(lis):
                    # header 样式
                    worksheet.write_string(
                        row=row,
                        col=col,
                        string=str(val)
                    )
        workbook.close()

    def process(self, **kwargs):
        in_file = kwargs["in_file"]
        name = in_file.split(os.sep)[-1].split(".")[0]
        out_lis = []
        headers = [["内容", "序号", "翻译"]]
        num = 0
        for args in self.read_yield(in_file):
            chinese_col = args["line"][args["headers"].index("内容")]
            if chinese_col:
                num += 1
                tran_result = self.translate(chinese_col)
                question = tran_result["question"]
                answer = tran_result["answer"]
                print(question, answer)
                out_lis.append([question, str(num), answer])

        self.write("{}_result.xlsx".format(name), data=out_lis, headers=headers, sheets=["Sheet1"])


if __name__ == '__main__':
    t = Translation()
    # in_file = R"D:\Desktop\4\图片映射表 .xlsx"
    in_file = input("输入待处理文件路径:")
    t.process(in_file=in_file)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 调用免费的百度翻译接口 翻译excel文档中的英文成中文 的相关文章

随机推荐

  • 全网最详细的Python安装教程,超级详细·小白秒懂!!!

    目录 1 安装版本说明 2 准备工作 确定操作系统及位数 2 1 确定方法1 2 2 确定方法2 3 下载Python安装包 4 安装Python 5 测试Python是否安装成功 6 Python安装成功后找不到编写代码的桌面快捷方式 7
  • 《开箱元宇宙》:Madballs 解锁炫酷新境界,人物化身系列大卖

    你是否曾想过 元宇宙是如何融入世界上最具代表性的品牌和名人的战略中的 在本期的 开箱元宇宙 系列中 我们与 Madballs 的战略顾问 Derek Roberto 一起聊聊 Madballs 如何在 90 分钟内售罄 2 000 个人物化
  • 如何利用场追迹控制衍射的包含

    1 摘要 VirtualLab Fusion包括一系列建模方法便于用户可以地调整光学仿真的精度级别和时间 不仅如此 这种功能还有助于隔离物理原因产生的不同影响 在本示例中 我们提出了一个清晰的工作流程配置一个仿真 以便在物理光学模拟中考虑或
  • 盘点最近超火的AI小红书商单玩法,7天快速涨粉1000+

    hi 同学们 今年是AI迎来爆发的一年 生成式AIGC技术大量涌现 正在加速为各行各业赋能 像大家熟悉的AI绘画和AI数字人等商业应用领域 基本先行的那波人都尝到了甜头 老粉都知道我做AI变现项目拆解也有大半年了 我们自有团队也在日常中不断
  • vue3新特性 compositionAPi与React.js中Hooks的异同点

    1 React js中的Hooks基本使用 React Hooks允 许你 勾入 诸如组件状态 和副作用处理等React功能中 Hooks只能用在函数组件中 并允许我们 在不需要创建类的情况下将状态 副作用处 理和更多东西带入组件中 Rea
  • 光学标准具的建模

    光学标准具在具有简单结构的透明板中可以形成法布里 珀罗谐振器 Fabry P rot resonators 并用于光谱和 或角谱选择 VirtualLab Fusion中的非序列场追迹技术可以对不同类型的标准具进行精确建模 其中包括平面或曲
  • Redis基础系列-安装Redis

    Redis基础系列 安装Redis 文章目录 Redis基础系列 安装Redis 1 环境要求 2 下载redis 3 安装 4 配置 5 参考与感谢 1 环境要求 安装C语言编译环境 r
  • 乘数而启,向数而行|2023数字金融创新发展论坛成功举办

    订阅制 C端消费者早已耳熟能详 如今也凭借灵活 服务更新稳定的特点 逐渐成为B端企业服务的新热点 比如对中小企业而言 办公IT设备等配套支出都必不可少 但收入 栗栗在线招人啦 哇 各位 招人好难啊 你们赶紧来找栗栗啊 不限经验 不限地域 不
  • 杂散光好书分享《FRED操作手册上、下》

    目 录 第一章 FRED概述 1 1 1 WHAT IS FRED 1 1 2 FRED与传统软件之间有什么不同 1 1 3 FRED名词术语 2 1 4 FRED用户界面 7 第二章 光源 16 2 1 简易光源 16 2 1 1 简易光
  • 用Czerny-Turner系统检测钠灯双线

    1 摘要 Czerny Turner系统被广泛用于分析光源的光谱信息 通常 首先用抛物面反射镜对光源进行准直 然后用衍射光栅对颜色进行空间分离 在这个例子中 我们提出了一种由反射镜和衍射光栅组成的Czerny Turner系统 用于检测钠双
  • Python 多线程装饰器 基于线程池实现

    usr bin env python3 coding UTF 8 author v jiaohaicheng baidu com des 多线程装饰器 基于cup包内置线程池实现 默认内置最大线程数10 from functools imp
  • 开环端到端自动驾驶: 从入门到放弃

    作者 木子士心王大可 编辑 汽车人 原文链接 https zhuanlan zhihu com p 669454065 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 端到端自动驾驶 技术交流
  • 初学者必看 | Python及PyCharm安装教程

    本期给大家推荐Python的安装教程 Python作为深度学习的必备工具 也是PHM初学者的必备技能 之前发表了基于Anaconda的Python及jupyter notebook编辑器的安装教程 这期主要是Python及PyCharm编辑
  • 【腾讯云云上实验室】个人对腾讯云向量数据库的体验心得

    目录 前言 Tencent Cloud VectorDB概念 使用初体验 腾讯云向量数据库的优势 应用场景有哪些 未来展望 番外篇 腾讯云向量数据库的设计核心 结语 前言 还是那句话 不用多说想必大家都能猜到 现在技术圈最火的是什么 非人工
  • 共赴新型工业化之“山海”,华为云生态的追求与远见

    统计数据显示 2022年 全国工业用电量达5 6万亿度 其中公辅能源耗电量约占40 所谓公辅能源 是指工业企业在生产制造环节所需的水 电 气 冷 热等公共辅助能源 研究显示 公辅能源的节能空间巨大 以10 的节能空间计算 一年可节省2000
  • MySQL:找回root密码

    一 情景描述 我们在日常学习中 经常会忘记自己的虚拟机中 MySQL 的 root 密码 这个时候 我们要想办法重置 root 密码 从而 解决 root 登陆问题 二 解决办法 1 修改 my cnf 配置文件并重启 MySQL 通过修改
  • Python下载与安装教程(很详细)|||

    一 打开python官网点击下载 搜索并打开官网进入页面后点击导航中的Downloads进入下载页面 二 选择要下载的python版本 最新版本的python不能在Windows7的电脑上使用 如果你的系统是win10及以上可以直接下载3
  • Python常用基础语法知识点大全合集,看完这一篇文章就够了

    介绍 Python 是一门独特的语言 快速浏览一下他的要点 面向对象 每一个变量都是一个类 有其自己的属性 attribute 与方法 method 语法块 用缩进 四个空格 而不是分号 花括号等符号来标记 因此 行首的空格不能随意书写 注
  • 惊!Python爬虫只需10行代码,海量公众号文章任你爬!

    前言 自从chatGPT出现后 对于文本处理的能力直接上升了一个维度 在这之前 我们爬取到网络上的文本内容之后 都需要写一个文本清理的程序 对文本进行清洗 而现在 有了chatGPT的加持 我们只需要几秒 就可以很方便对所有类型 所有格式的
  • Python 调用免费的百度翻译接口 翻译excel文档中的英文成中文

    usr bin env python3 coding UTF 8 author JHC license None contact JHC000abc gmail com file get coogle translate results p