基于Python的百度API接口翻译文本

基于Python的百度API翻译Excel文档


不需要目录,都是干货


另外我还有word文档翻译,欢迎下载

from openpyxl.reader.excel import load_workbook
from openpyxl.writer.excel import ExcelWriter
import openpyxl
import os
import requests
import json
import getopt
import sys
from tqdm import tqdm
import glob
import codecs
import time
import random
import hashlib
from urllib import parse
import http.client
os.chdir('./')

# 从指定文件路径读取excel文件和Sheet表格

def Get_path():
     for file in glob.glob(r'.Source File\*.xlsx'):
          load_workbook(file)
          print(file+"hello2")
          return file    #因为Sheet的原因,一次只能翻译一个文件

def Get_table():
     return  input("请输入需要翻译的表格(Sheet):")

origin_list = []
dest_list = []
def Get_contents( file_path, sheet_index, x_start, y_start, x_end, y_end):
     contents = []
     try:
          wb=load_workbook(file_path)
     except:
          print("错误:打开文件失败,请检查文件路径是否有误!!!")
          sys.exit()
     try:
          sheet = wb.get_sheet_by_name(sheet_index)
     except:
          print("错误:打开sheet表格失败,请检查表名是否有误!!!")
          sys.exit()
     for i in range(x_start, x_end+1):
          for j in range(y_start, y_end+1):
               try:
                    if(sheet.cell(i,j).value == None):
                         contents.append("")
                    else:
                         old = sheet.cell(i,j).value
                         contents.append(old)
               except Exception as e:
                    print('读取时发生错误:' + e)
     print(len(contents))
     return contents

class BaiduTranslate:
     def __init__(self,fromLang,toLang):
          self.url = "/api/trans/vip/translate"
          self.appid="用你自己的,我的不给" #申请的账号
          self.secretKey = '用你自己的,我的不给'#账号密码
          self.fromLang = fromLang
          self.toLang = toLang
          self.salt = random.randint(32768, 65536)

     def BdTrans(self,origin_contents):
          dst_contents = []
          for index in origin_contents:
               if(index  == "" ):
                    dst_contents.append("")
                    continue
               else:
                    spilt_str = index.replace("\n", "+$+")
                    print(index)
                    sign = self.appid + spilt_str + str(self.salt) + self.secretKey
                    md = hashlib.md5()
                    md.update(sign.encode(encoding='utf-8'))
                    sign = md.hexdigest()
                    myurl = self.url + \
                         '?appid=' + self.appid + \
                         '&q=' + parse.quote(spilt_str) + \
                         '&from=' + self.fromLang + \
                         '&to=' + self.toLang + \
                         '&salt=' + str(self.salt) + \
                         '&sign=' + sign
                    try:
                         httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
                         httpClient.request('GET', myurl)
                         response = httpClient.getresponse()
                         html = response.read().decode('utf-8')
                         html = json.loads(html)

                         receive_text = html["trans_result"][0]["dst"]
                         write_text = receive_text.replace("+$+", "\n")
                         print( write_text )
                         dst_contents.append( write_text )
                    except Exception as e:
                         print('翻译出错,将会默认填入原文本')
                         return index
               time.sleep(1)
          return dst_contents

def Write_contents( path, sheet_num,ocontents, contents, x_start, y_start, x_end, y_end):
     index = 0
     workbook = openpyxl.load_workbook(path)      # 打开已存在的excel
     #sheet = workbook.createsheet(sheet_num)     # 在excel中新建sheet
     sheet = workbook.get_sheet_by_name(sheet_num)  # 在excel中获取已有sheet
     for i in range(x_start, x_end+1):
          for j in range(y_start, y_end+1):
               try:
                    if( (origin_start_row ==  dest_start_row) and (origin_start_col == dest_start_col)  ):
                         sheet.cell(row=i,column= j,value=str(ocontents[index])+'\n'+str(contents[index]))     # 后面追加
                    else:
                         sheet.cell( row=i,column= j,value=str(contents[index]) )
                    index+=1
               except Exception as e:
                    print('写入时发生错误:' + e)
     workbook.save(path)# 写入excel文件 如果path路径的文件不存在那么就会自动创建
     print('写入成功')

if __name__ == '__main__':
     path = Get_path()
     table = Get_table()
     print("如果文本范围相同,则会在原来的文本后添加")
     origin_start_row, origin_start_col,origin_end_row, origin_end_col = \
                  map(int, input("请输入需要翻译的文本范围,数字之间用空格分隔开:").split(" "))

     dest_start_row, dest_start_col,dest_end_row, dest_end_col = \
                  map(int, input("请输入翻译后的存放范围,数字之间用空格分隔开:").split(" "))
     origin_list = Get_contents(path, table,\
                               origin_start_row,  origin_start_col, origin_end_row,  origin_end_col)     #从1开始

     BaiduTranslate_test = BaiduTranslate('en','zh')
     dest_list = BaiduTranslate_test.BdTrans(origin_list) #百度API接口翻译

     Write_contents(path, table, origin_list,dest_list,\
               dest_start_row,  dest_start_col, dest_end_row,  dest_end_col)     #从1开始,第几行第几列
     print('Translate complete!!!')
     os.system('pause')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值