Python E化-英文资料自动翻译

复制PPTX内容到excel

# encoding:utf-8

from pptx import Presentation
import openpyxl
import os

#### 读取所有PPTX文件的名字
def list_dictionary_codes(root_dir):
    paths_list = []
    for parent, dirNames, fileNames in os.walk(root_dir):
        for name in fileNames:
            ext = ['.pptx']
            if name.endswith(tuple(ext)):
                paths_list.append(os.path.join(name))
    return paths_list

root_dir=r'D:\auto_translate-20200519单机D盘版V2\English_Culture_input\input\\'
mypaths_list=list_dictionary_codes(root_dir)
print(mypaths_list)	



###### 输入需要翻译的内容
translate_file=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_input\\"
translate_outputfile=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_output\\"
wb=openpyxl.load_workbook(translate_file+"input_file.xlsx")
sheet=wb.get_sheet_by_name('翻译')


# 将不同pptx的文件写入list,并保存在excel里面
j=2 # 开始写入的excel栏位
for p in range(0,len(mypaths_list)):
	#写入需要翻译的内容
	word_list=[]
	ppt = Presentation(root_dir+mypaths_list[p])
	for slide in ppt.slides:
		for shape in slide.shapes:
			if shape.has_text_frame:
				text_frame = shape.text_frame
				# 利用ppt_text来转码数据
				ppt_text= text_frame.text
				ppt_text = ppt_text.replace(u'\xa0', u' ')
				ppt_text = ppt_text.replace(u'\x0b', u'')
				word_list.append(ppt_text)

	print(word_list)
	print('读取完毕'+mypaths_list[p])

	# 将记录存进去excel
	for i in range(0,len(word_list)):
		sheet.cell(row=j, column=1).value=word_list[i]
		j=j+1


# 保存文件
wb.save(translate_file+"input_PPT内容.xlsx")
wb.close()
print('复制PPTX内容到excel完毕')
print('请打开excel表,删除“空白的行”和“日期的行”,否则会报错')

自制翻译器-金山-百度

import requests,json,openpyxl
from bs4 import BeautifulSoup



def translate_iciba(myword):
##### 金山翻译 #####
    #把请求登录的网址赋值给url。
    url = 'http://fy.iciba.com/ajax.php?a=fy'

    #加请求头,前面有说过加请求头是为了模拟浏览器正常的访问,避免被反爬虫。
    headers = {
    
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}

    #把有关登录的参数封装成字典,赋值给data。
    data = {
    
    
    'f': 'auto',
    't': 'auto',
    'w': myword,}

    #用requests.post发起请求,放入参数:请求登录的网址、请求头和登录参数,然后赋值给login_in。
    translate_request = requests.post(url,headers=headers,data=data)

    #打印出comment的状态码,若状态码等于200,则证明我们评论成功。
    #print(translate_request.status_code)

    js_translate=translate_request.json()
    mytranslator_iciba=js_translate['content']['out']
    print('金山翻译:'+mytranslator_iciba)
    return mytranslator_iciba



#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import hashlib
import random
import openpyxl
from openpyxl import Workbook
import requests
import time

# set baidu develop parameter
apiurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
appid = '***'
secretKey = '***'
 
# 接入API:翻译内容 源语言 翻译后的语言
def translateBaidu(content, fromLang='auto', toLang='auto'):
    time.sleep(0.5)
    salt = str(random.randint(32768, 65536))
    sign = appid + content + salt + secretKey
    sign = hashlib.md5(sign.encode("utf-8")).hexdigest()
    try:
        paramas = {
    
    
            'appid': appid,
            'q': content,
            'from': fromLang,
            'to': toLang,
            'salt': salt,
            'sign': sign
        }
        time.sleep(1.2)
        response = requests.get(apiurl, paramas)
        time.sleep(1.2)
        jsonResponse = response.json()  # 获得返回的结果,结果为json格式
        dst=[]
        for i in range(0,20):
            try:
                dst_sub = str(jsonResponse["trans_result"][i]["dst"])  # 取得翻译后的文本结果
                dst.append(dst_sub)
            except Exception:
                pass
        dst='\n'.join(dst)
        print('百度翻译:'+dst)
        return dst         
    except Exception as e:
        print(e)


# 输入需要翻译的内容
translate_file=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_input\\"
translate_outputfile=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_output\\"

wb=openpyxl.load_workbook(translate_file+"input_PPT内容.xlsx")
sheet=wb.get_sheet_by_name('翻译')
rows=sheet.max_row

for i in range(2,rows+1):
    # 原文
    myword=sheet.cell(row=i, column=1).value
    # 修改后的翻译
    sheet.cell(row=i, column=3).value=myword
    # 金山翻译
    sheet.cell(row=i, column=2).value=translate_iciba(myword)
    # 百度翻译
    sheet.cell(row=i, column=4).value = translateBaidu(myword)
    wb.save(translate_outputfile+"output_金山翻译.xlsx")


wb2=openpyxl.load_workbook(translate_outputfile+"output_金山翻译.xlsx")
sheet2=wb2.get_sheet_by_name('翻译')
rows2=sheet2.max_row

## 百度翻译为空值的栏位补充完毕
print('检查百度翻译是否有空值')
for j in range(15):
    time.sleep(1)
    for i in range(2,rows2+1):
        while sheet2.cell(row=i, column=4).value == None:
            # 原文
            myword=sheet2.cell(row=i, column=1).value
            # 百度翻译
            sheet2.cell(row=i, column=4).value = translateBaidu(myword)
            wb2.save(translate_outputfile+"output_金山翻译.xlsx")

wb2.close()
#wb.close()
print('翻译导出Ok')


补充百度翻译

import requests,json,openpyxl
from bs4 import BeautifulSoup


#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import hashlib
import random
import openpyxl
from openpyxl import Workbook
import requests
import time

# set baidu develop parameter
apiurl = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
appid = '***'
secretKey = '***'
 
# 接入API:翻译内容 源语言 翻译后的语言
def translateBaidu(content, fromLang='auto', toLang='auto'):
    time.sleep(0.5)
    salt = str(random.randint(32768, 65536))
    sign = appid + content + salt + secretKey
    sign = hashlib.md5(sign.encode("utf-8")).hexdigest()
    try:
        paramas = {
    
    
            'appid': appid,
            'q': content,
            'from': fromLang,
            'to': toLang,
            'salt': salt,
            'sign': sign
        }
        time.sleep(1.2)
        response = requests.get(apiurl, paramas)
        time.sleep(1.2)
        jsonResponse = response.json()  # 获得返回的结果,结果为json格式
        dst=[]
        for i in range(0,20):
            try:
                dst_sub = str(jsonResponse["trans_result"][i]["dst"])  # 取得翻译后的文本结果
                dst.append(dst_sub)
            except Exception:
                pass
        dst='\n'.join(dst)
        print('百度翻译:'+dst)
        return dst         
    except Exception as e:
        print(e)


# 输入需要翻译的内容
translate_file=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_input\\"
translate_outputfile=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_output\\"


wb2=openpyxl.load_workbook(translate_outputfile+"output_金山翻译.xlsx")
sheet2=wb2.get_sheet_by_name('翻译')
rows2=sheet2.max_row

## 百度翻译为空值的栏位补充完毕
print('检查百度翻译是否有空值')
for j in range(10):
    time.sleep(1)
    for i in range(2,rows2+1):
        while sheet2.cell(row=i, column=4).value == None:
            # 原文
            myword=sheet2.cell(row=i, column=1).value
            # 百度翻译
            sheet2.cell(row=i, column=4).value = translateBaidu(myword)
            wb2.save(translate_outputfile+"output_金山翻译.xlsx")

wb2.close()

print('翻译导出Ok')


将翻译结果生产PPT

from pptx import Presentation
from pptx.util import Pt
import pptx
import openpyxl

### 文化墙的PPTX模板只有一页,务必定义好模板格式(只留1个文本框即可)

translate_file=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_input\\"
translate_outputfile=r"D:\auto_translate-20200519单机D盘版V2\English_Culture_output\\"


prs = Presentation(translate_file+'公司PPT:input-WT.pptx')

# 读取数据
wb=openpyxl.load_workbook(translate_outputfile+'output_金山翻译.xlsx')
sheet=wb.get_sheet_by_name('翻译')
rows=sheet.max_row



##### PPTX第1页 #####
# 跳转到指定slide
slide = prs.slides[0]
# 增加标题
#slide.shapes.title.text = ''
# 增加内容
# 在第二个文本框中文字框架内添加文字
tf = slide.shapes.placeholders[1].text_frame
tf.text=sheet.cell(row=1, column=3).value



##### PPTX第2-n页 #####
for j in range(2,rows+1):
    # 采用第一种样式
    bullet_slide_layout = prs.slide_layouts[1]
    # 增加一个图层
    slide = prs.slides.add_slide(bullet_slide_layout)
    # 增加标题
    #slide.shapes.title.text = ''
    # 增加内容
    # 在第二个文本框中文字框架内添加文字
    tf = slide.shapes.placeholders[1].text_frame
    tf.text = sheet.cell(row=j, column=3).value
    tf.level = 0 #数字越大,层次越深



prs.save(translate_outputfile+'output:英语文化墙.pptx')
print('PPTX导出成功')

猜你喜欢

转载自blog.csdn.net/m0_46629123/article/details/109105707