pip install python-docx
# -*- coding: utf-8 -*-
"""
Created on 2021.09.09
"""
import win32clipboard as cb
import win32con
import requests
# from HandleJs import Py4Js
import xlwt
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt,RGBColor
import execjs
# 网上抄的代码,我也不知道做什么用的
class Py4Js():
def __init__(self):
self.ctx = execjs.compile("""
function TL(a) {
var k = "";
var b = 406644;
var b1 = 3293161072;
var jd = ".";
var $b = "+-a^+6";
var Zb = "+-3^+b+-f";
for (var e = [], f = 0, g = 0; g < a.length; g++) {
var m = a.charCodeAt(g);
128 > m ? e[f++] = m : (2048 > m ? e[f++] = m >> 6 | 192 : (55296 == (m & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (m = 65536 + ((m & 1023) << 10) + (a.charCodeAt(++g) & 1023),
e[f++] = m >> 18 | 240,
e[f++] = m >> 12 & 63 | 128) : e[f++] = m >> 12 | 224,
e[f++] = m >> 6 & 63 | 128),
e[f++] = m & 63 | 128)
}
a = b;
for (f = 0; f < e.length; f++) a += e[f],
a = RL(a, $b);
a = RL(a, Zb);
a ^= b1 || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a %= 1E6;
return a.toString() + jd + (a ^ b)
};
function RL(a, b) {
var t = "a";
var Yb = "+";
for (var c = 0; c < b.length - 2; c += 3) {
var d = b.charAt(c + 2),
d = d >= t ? d.charCodeAt(0) - 87 : Number(d),
d = b.charAt(c + 1) == Yb ? a >>> d: a << d;
a = b.charAt(c) == Yb ? a + d & 4294967295 : a ^ d
}
return a
}
""")
def getTk(self,text):
return self.ctx.call("TL",text)
js=Py4Js()
# 翻译并返回中文
def googleTranslate(content):
if len(content) > 4891:
print("翻译的长度超过限制!!!")
return
tk = js.getTk(content)
param = {'tk': tk, 'q': content}
result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl=en
&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss
&dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2""", params=param).json()[0]
#返回的结果为Json,解析为一个嵌套列表
return "".join([text[0] for text in result[:-1]])
# 这个函数我也没懂是干嘛的,但是不用也不影响啥就没用
def settext(aString):
cb.OpenClipboard()
try:
cb.EmptyClipboard()
cb.SetClipboardData( win32con.CF_UNICODETEXT, aString)
except:
print("Any error in func:settext()")
cb.CloseClipboard()
# 删()引用
def deletBracket(source,flags,pad_sym=chr(0)):
code={"(":1, ")":-1}
index = [i for i in range(len(source)) if source[i]=="(" or source[i]==")"]
match,start=0,-1
for i in index:
match+= code[ source[i] ]
if start<0 and match==1:
start = i
if match==0:
concent=source[start: i+1]
check=sum([concent.find(flag) for flag in flags])+len(flags)
if check > 0:
source=source.replace(concent,pad_sym*len(concent),1)
start=-1
return source.replace(pad_sym,"")
# 从本地文本获取翻译内容
def getTextFromTXT():
# 打开文件
openFile = open('./1.txt', 'r', encoding="utf8")
toBeList = openFile.readlines()
# 去掉回车
withoutEnter = []
for i in toBeList:
withoutEnter.append(i.split('\n')[0])
# 拼接数据
result = ' '.join(withoutEnter)
openFile.close()
# 如果是不只一段文本,会手动在文本的段落开头里面加上'///'以进行段落的分割
return result.split('///')
# 从剪贴板获取翻译内容
def getTextFromClipboard():
cb.OpenClipboard()
try:
t = cb.GetClipboardData( win32con.CF_UNICODETEXT)
except TypeError:
print("There are NO TEXT in clipboard.")
else :
t= t.replace(chr(0),"")
# huanhang
t=t.replace("\r","")
t=t.replace("\n"," ")
# fenju
pad_sym=chr(0)
t=t.replace("e.g. ","e.g."+pad_sym)
t=t.replace("i.e. ","i.e."+pad_sym)
t=t.replace("Eq. ","Eq."+pad_sym)
t=t.replace("Mr. ","Mr."+pad_sym)
# t=t.replace(".",". \r\n")
t=t.replace(pad_sym," ")
# qu()
t=deletBracket(t,["et al.", ", 201", ", 200", ", 199"],pad_sym)
t=t.replace(" "," ")
# settext(t).
return t
finally:
cb.CloseClipboard()
# 将文本写入文档
def writeDocument(writeMethod, source):
if writeMethod == 0:
chinese = Document()
english = Document()
print('文档被清零!!!')
else:
try:
chinese = Document("F:\\01-公司测试软件\\数据处理脚本\\文献助手\\Chinese.docx")
english = Document("F:\\01-公司测试软件\\数据处理脚本\\文献助手\\English.docx")
print('文档未被清零!!!')
except:
chinese = Document()
english = Document()
print('文档被清零!!!')
english.add_paragraph(' ' +source)
chinese.add_paragraph(' ' +source)
chinese.add_paragraph(' ' +googleTranslate(source))
chinese.styles['Normal'].font.name = u'阿里巴巴普惠体 R'
chinese.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'阿里巴巴普惠体 R')
chinese.styles['Normal'].font.size = Pt(9)
english.styles['Normal'].font.name = u'阿里巴巴普惠体 R'
english.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'阿里巴巴普惠体 R')
english.styles['Normal'].font.size = Pt(9)
chinese.save("F:\\01-公司测试软件\\数据处理脚本\\文献助手\\Chinese.docx")
english.save("F:\\01-公司测试软件\\数据处理脚本\\文献助手\\English.docx")
def main(count, writeMethod):
if count == 1:
source = getTextFromClipboard()
# print(googleTranslate(source))
writeDocument(writeMethod, source)
print('成功从剪贴板写入数据到Word文档!!!')
else:
source = getTextFromTXT()
# print(source)
x = 1
for i in source:
# print(googleTranslate(i))
# print("\n成功从文本导入第{}段!!!".format(x))
writeDocument(writeMethod, i)
print("成功从文本导入第{}段到文档!!!".format(x))
writeMethod = writeMethod + 1
x = x + 1
if __name__ == '__main__':
# main(count, writeMethod)
# count为从哪里获取内容(0从text获取,1从剪切板获取),writeMethod为如何写入(0为清零,1为添加)
clipboard, text = 1 ,0
clean , add = 0 ,1
main(0,0)
菜鸟分享,不喜勿喷!!
学好英语才是王道!!!
如果侵权请联系本人删除
部分代码原文链接
https://www.jianshu.com/p/30fc5c7def54?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation