python-docx怎么使用
今天主机评测网小编给大家分享一下python-docx怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
python-docx的简单使用
'''设置表格所有单元格的四个边为0.5磅,黑色,实线可以使用返回值,也可以不使用'''def设置表格网格线为黑色实线(table_object:object):kwargs={"top":{"sz":4,"val":"single","color":"#000000"},"bottom":{"sz":4,"val":"single","color":"#000000"},"left":{"sz":4,"val":"single","color":"#000000"},"right":{"sz":4,"val":"single","color":"#000000"},"insideV":{"sz":4,"val":"single","color":"#000000"},"insideH":{"sz":4,"val":"single","color":"#000000"}}borders=docx.oxml.OxmlElement('w:tblBorders')fortagin('bottom','top','left','right','insideV','insideH'):edge_data=kwargs.get(tag)ifedge_data:any_border=docx.oxml.OxmlElement(f'w:{tag}')forkeyin["sz","val","color","space","shadow"]:ifkeyinedge_data:any_border.set(docx.oxml.ns.qn(f'w:{key}'),str(edge_data[key]))borders.append(any_border)table_object._tbl.tblPr.append(borders)returntable_object'''设置标题样式'''def设置标题样式为黑色宋体(heading_object:object):heading_object.alignment=docx.enum.text.WD_ALIGN_PARAGRAPH.LEFT#左对齐forruninheading_object.runs:run.font.name=u'宋体'#设置为宋体#run._element.rPr.rFonts.set(qn('w:eastAsia'),u'宋体')#设置为宋体,和上边的一起使用run.font.color.rgb=docx.shared.RGBColor(0,0,0)#设置颜色为黑色returnheading_object'''创建docx文档,将翻译结果和原文写入文档中'''defword():my_word_doc=docx.Document()#打开一个空白文档#forstyleinmy_word_doc.styles:#print(style)heading=my_word_doc.add_heading(翻译结果["NAME"],level=2)#指定样式标题2设置标题样式为黑色宋体(heading)heading=my_word_doc.add_heading("描述",level=3)#指定样式标题3设置标题样式为黑色宋体(heading)forlinein翻译结果["SYNOPSIS"].split("\n"):my_word_doc.add_paragraph(line)forlinein翻译结果["DESCRIPTION"].split("\n"):my_word_doc.add_paragraph(line)heading=my_word_doc.add_heading("参数",level=3)#指定样式标题3设置标题样式为黑色宋体(heading)#table=my_word_doc.add_table(rows=len(翻译结果["PARAMETERS"]),cols=3)#指定样式标题3;在末尾添加一个表table=my_word_doc.add_table(rows=len(翻译结果["PARAMETERS"]),cols=2)#指定样式标题3;在末尾添加一个表#table.style=my_word_doc.styles['MediumGrid1']设置表格网格线为黑色实线(table)index=0forkey,valuein翻译结果["PARAMETERS"].items():forlineinkey.split("\n"):cell=table.cell(index,0)cell.text+=lineforlineinvalue.split("\n"):table.cell(index,1).text+=line#table.cell(index,1).text=帮助文件解析结果["PARAMETERS"][key]cell_paragraphs=table.cell(index,0).paragraphsforiincell_paragraphs:i.alignment=docx.enum.text.WD_PARAGRAPH_ALIGNMENT.LEFT#左对齐cell_paragraphs=table.cell(index,1).paragraphsforiincell_paragraphs:i.alignment=docx.enum.text.WD_PARAGRAPH_ALIGNMENT.LEFT#左对齐#table.cell(index,2).text=value#cell_paragraphs=table.cell(index,2).paragraphs#foriincell_paragraphs:#i.alignment=docx.enum.text.WD_PARAGRAPH_ALIGNMENT.LEFT#左对齐index+=1heading=my_word_doc.add_heading("示例",level=3)#指定样式标题3设置标题样式为黑色宋体(heading)forkey,valuein翻译结果["Example"].items():heading=my_word_doc.add_heading(key[0:-1],level=4)#指定样式标题4设置标题样式为黑色宋体(heading)forlineinvalue.split("\n"):my_word_doc.add_paragraph(line)my_word_doc.save(r"C:\Users\gyj\Downloads\temp.docx")
实际上我是拿来转换PowerShell cmdlet命令的帮助txt文件为word文档的。其中带了翻译。简单记录下。
importdocx#pipinstallpython-docximportreimportjsonimportrequestsimporttimeimporthashlibfromurllib.parseimporturlencodeimportrandomimportcopy#字典形式帮助文件解析结果={"NAME":"","SYNOPSIS":"","DESCRIPTION":"","PARAMETERS":{},"Example":{}};翻译结果={"NAME":"","SYNOPSIS":"","DESCRIPTION":"","PARAMETERS":{},"Example":{}};''''''def解析PowerShell命令的帮助文本(文件路径:str):withopen(文件路径,mode='r',encoding='utf-8')asfd_help:line=fd_help.readline();whileline:if(line.strip()=="NAME"):line=fd_help.readline()line=line.strip()帮助文件解析结果['NAME']=lineelif(line.strip()=="SYNOPSIS"):line=fd_help.readline()whileline[0:4]=="":帮助文件解析结果['SYNOPSIS']+=line.lstrip()line=fd_help.readline()elif(line.strip()=="DESCRIPTION"):line=fd_help.readline()whileline[0:4]=="":帮助文件解析结果['DESCRIPTION']+=line.lstrip()line=fd_help.readline()elif(line.strip()=="PARAMETERS"):line=fd_help.readline()whileline[0:4]=="":参数名=line.lstrip()帮助文件解析结果['PARAMETERS'][参数名]=""line=fd_help.readline()whileline[0:8]=="":帮助文件解析结果['PARAMETERS'][参数名]+=line.lstrip()line=fd_help.readline()if(len(re.findall(r'^\s*-*\s*Example',line))):breakelif(len(re.findall(r'^\s*-*\s*Example',line))):temp=re.sub(r"^\s*-*\s*([\w,\.:]+)*-*",r"\1",line)temp.rstrip()帮助文件解析结果["Example"][temp]="";line=fd_help.readline()whileline:if(len(re.findall(r'^\s*-*\s*Example',line))):temp=re.sub(r"^\s*-*\s*([\w,\.:]+)*-*",r"\1",line)temp.rstrip()帮助文件解析结果["Example"][temp]="";line=fd_help.readline()whilenot(len(re.findall(r'^\s*-*\s*Example',line)))andline:帮助文件解析结果["Example"][temp]+=line.lstrip()line=fd_help.readline()else:line=fd_help.readline()#检查key=""的情况,并删除这样的keyif(""in帮助文件解析结果):del帮助文件解析结果[""]if(""in帮助文件解析结果["PARAMETERS"]):del帮助文件解析结果["PARAMETERS"][""]if(""in帮助文件解析结果["Example"]):del帮助文件解析结果["Example"][""]#本文件是通过请求有道翻译,去获取翻译结果'''i:你好from:AUTOto:AUTOsmartresult:dictclient:fanyideskwebsalt:16643765479061//毫秒级别的时间戳后面加上个0-9之间的随机数,js代码:r+parseInt(10*Math.random(),10);这里的r表示时间戳字符串sign:1d69ce8f7c6258243e573e31e29e0012//签名,下面找到了lts:1664376547906//毫秒级别的时间戳bv:42c8b36dd7d61c619e7b1dc11e44d870//同设备相同,使用md5加密的(方法是:md5(User-Agent)==>md5("5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/105.0.0.0Safari/537.36Edg/105.0.1343.53")doctype:jsonversion:2.1keyfrom:fanyi.webaction:FY_BY_REALTlME/*解密出来了:sign的计算如下define("newwebmon/service",["./utils","./md5","./jquery-1.7"],function(e,t){varn=e("./jquery-1.7");e("./utils");e("./md5");varr=function(e){vart=n.md5(navigator.appVersion),r=""+(newDate).getTime(),i=r+parseInt(10*Math.random(),10);return{ts:r,bv:t,salt:i,sign:n.md5("fanyideskweb"+e+i+"Ygy_4c=r#e#4EX^NUGUc5")//在这里,e是要翻译的内容,i是毫秒级别的时间戳后面加上个0-9之间的随机数;后面这串字符串估计是服务器那边随机生成的,应该会变化。每次抓取的时候,可以查看下js代码}};总体来说,data数据由函数“generateSaltSign”计算出来*/''''''获取翻译结果The_translated_string:被翻译的字符串由于翻译是以行为单位,所以一行一个结果,函数将解析The_translated_string参数,并以字符串形式返回所有翻译结果'''defyoudao_translate(The_translated_string:str):if(The_translated_string==""):return{"":""}url=r'fanyi.youdao/translate_o?smartresult=dict&smartresult=rule'User_Agent="5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/106.0.0.0Safari/537.36Edg/106.0.1370.37"header={"Accept":"application/json,text/javascript,*/*;q=0.01","Accept-Encoding":"gzip,deflate,br","Accept-Language":"zh,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","Connection":"keep-alive",#"Content-Length":"307","Content-Type":"application/x-form-urlencoded;charset=UTF-8","Cookie":"OUTFOX_SEARCH_USER_ID=1135160796@10.108.162.134;OUTFOX_SEARCH_USER_ID_NCOO=775555146.507473;JSESSIONID=aaaQ2GYK5N-ozb24rKNcy;SESSION_FROM_COOKIE=unknown;DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|;JSESSIONID=abcPzon0RcZqc7GltuAgy;___rl__test__cookies=1665366515354","Host":"fanyi.youdao","Origin":"fanyi.youdao","Referer":"fanyi.youdao/","sec-ch-ua":"""\"GoogleChrome";v="105","Not)A;Brand";v="8","Chromium";v="105"\"""","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"Windows","Sec-Fetch-Dest":"empty","Sec-Fetch-Mode":"cors","Sec-Fetch-Site":"same-origin","User-Agent":User_Agent,"X-Requested-With":"XMLHttpRequest"}#The_translated_string=input("输入你要翻译的中文信息:\n")#被翻译的字符串timestamp=str(round(time.time()*1000))#毫秒级别的时间戳salt=timestamp+str(random.randint(0,9))#毫秒级别的时间戳后面加上个0-9之间的随机数sign_str="fanyideskweb"+The_translated_string+salt+"Ygy_4c=r#e#4EX^NUGUc5"#构造签名字符串#签名,算法:sign:n.md5("fanyideskweb"+e+i+"Ygy_4c=r#e#4EX^NUGUc5")//在这里,后面这串字符串估计是服务器那边随机生成的,应该会变化。每次抓取的时候,可以查看下js代码sign=hashlib.md5(str.encode(sign_str)).hexdigest()#同设备相同,使用md5加密的(方法是:md5(User-Agent)==>md5("5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/105.0.0.0Safari/537.36Edg/105.0.1343.53")bv=hashlib.md5(str.encode(User_Agent)).hexdigest()cookies={"OUTFOX_SEARCH_USER_ID":"1135160796@10.108.162.134","OUTFOX_SEARCH_USER_ID_NCOO":"775555146.507473","JSESSIONID":"aaaQ2GYK5N-ozb24rKNcy","SESSION_FROM_COOKIE":"unknown","DICT_UGC":"be3af0da19b5c5e6aa4e17bd8d90b28a|","JSESSIONID":"abcPzon0RcZqc7GltuAgy","___rl__test__cookies":"1665366515354"}data={"i":The_translated_string,"from":"AUTO","to":"AUTO",#一般来说,是从中文翻译为英文#"from":"zh-CHS",#"to":"en","smartresult":"dict","client":"fanyideskweb","salt":salt,"sign":sign,"lts":timestamp,"bv":bv,"doctype":"json","version":"2.1","keyfrom":"fanyi.web","action":"FY_BY_CLICKBUTTION"}data=urlencode(data);result=requests.post(url,data=data,cookies=cookies,headers=header)json_result=json.loads(result.text);#lines=The_translated_string.splitlines();#按照行边界拆分if(notjson_result["errorCode"]):ret_list="";foriinjson_result["translateResult"]:#如果源字符串就是存在段落的,则这里就会根据其来分结果forjini:#翻译服务器认为该分段的,这里就会再次存在子项ret_list+=j['tgt']ret_list+="\n"#ret_list[json_result["translateResult"][i][0]["src"]]=json_result["translateResult"][i][0]["tgt"]returnret_list;else:return"errorCode="+str(json_result["errorCode"]);#示例'''str_="你好\n世界\n我来了\n哈哈"print(youdao_translate(str_))-----out-----{'你好':'hello','世界':'Theworld','我来了':"I'm ing",'哈哈':'Haha'}''''''将变量“帮助文件解析结果”中的value翻译成中文'''def执行翻译():翻译结果=copy.deepcopy(帮助文件解析结果)#这里执行了深拷贝了,所以它不再是外面的那个“翻译结果”变量了翻译结果["SYNOPSIS"]=youdao_translate(翻译结果["SYNOPSIS"])翻译结果["DESCRIPTION"]=youdao_translate(翻译结果["DESCRIPTION"])forkey,valuein翻译结果["PARAMETERS"].items():if(value==""):continue翻译结果["PARAMETERS"][key]=youdao_translate(value)forkey,valuein翻译结果["Example"].items():if(value==""):continue翻译结果["Example"][key]=youdao_translate(value)temp_dict={}forkey,valuein翻译结果["Example"].items():if(key==""):continuetemp_dict[youdao_translate(key)]=value翻译结果["Example"]=temp_dictreturn翻译结果'''设置表格所有单元格的四个边为0.5磅,黑色,实线可以使用返回值,也可以不使用'''def设置表格网格线为黑色实线(table_object:object):kwargs={"top":{"sz":4,"val":"single","color":"#000000"},"bottom":{"sz":4,"val":"single","color":"#000000"},"left":{"sz":4,"val":"single","color":"#000000"},"right":{"sz":4,"val":"single","color":"#000000"},"insideV":{"sz":4,"val":"single","color":"#000000"},"insideH":{"sz":4,"val":"single","color":"#000000"}}borders=docx.oxml.OxmlElement('w:tblBorders')fortagin('bottom','top','left','right','insideV','insideH'):edge_data=kwargs.get(tag)ifedge_data:any_border=docx.oxml.OxmlElement(f'w:{tag}')forkeyin["sz","val","color","space","shadow"]:ifkeyinedge_data:any_border.set(docx.oxml.ns.qn(f'w:{key}'),str(edge_data[key]))borders.append(any_border)table_object._tbl.tblPr.append(borders)returntable_object'''设置标题样式'''def设置标题样式为黑色宋体(heading_object:object):heading_object.alignment=docx.enum.text.WD_ALIGN_PARAGRAPH.LEFT#左对齐forruninheading_object.runs:run.font.name=u'宋体'#设置为宋体#run._element.rPr.rFonts.set(qn('w:eastAsia'),u'宋体')#设置为宋体,和上边的一起使用run.font.color.rgb=docx.shared.RGBColor(0,0,0)#设置颜色为黑色returnheading_object'''创建docx文档,将翻译结果和原文写入文档中'''defword():my_word_doc=docx.Document()#打开一个空白文档#forstyleinmy_word_doc.styles:#print(style)heading=my_word_doc.add_heading(翻译结果["NAME"],level=2)#指定样式标题2设置标题样式为黑色宋体(heading)heading=my_word_doc.add_heading("描述",level=3)#指定样式标题3设置标题样式为黑色宋体(heading)forlinein翻译结果["SYNOPSIS"].split("\n"):my_word_doc.add_paragraph(line)forlinein翻译结果["DESCRIPTION"].split("\n"):my_word_doc.add_paragraph(line)heading=my_word_doc.add_heading("参数",level=3)#指定样式标题3设置标题样式为黑色宋体(heading)#table=my_word_doc.add_table(rows=len(翻译结果["PARAMETERS"]),cols=3)#指定样式标题3;在末尾添加一个表table=my_word_doc.add_table(rows=len(翻译结果["PARAMETERS"]),cols=2)#指定样式标题3;在末尾添加一个表#table.style=my_word_doc.styles['MediumGrid1']设置表格网格线为黑色实线(table)index=0forkey,valuein翻译结果["PARAMETERS"].items():forlineinkey.split("\n"):cell=table.cell(index,0)cell.text+=lineforlineinvalue.split("\n"):table.cell(index,1).text+=line#table.cell(index,1).text=帮助文件解析结果["PARAMETERS"][key]cell_paragraphs=table.cell(index,0).paragraphsforiincell_paragraphs:i.alignment=docx.enum.text.WD_PARAGRAPH_ALIGNMENT.LEFT#左对齐cell_paragraphs=table.cell(index,1).paragraphsforiincell_paragraphs:i.alignment=docx.enum.text.WD_PARAGRAPH_ALIGNMENT.LEFT#左对齐#table.cell(index,2).text=value#cell_paragraphs=table.cell(index,2).paragraphs#foriincell_paragraphs:#i.alignment=docx.enum.text.WD_PARAGRAPH_ALIGNMENT.LEFT#左对齐index+=1heading=my_word_doc.add_heading("示例",level=3)#指定样式标题3设置标题样式为黑色宋体(heading)forkey,valuein翻译结果["Example"].items():heading=my_word_doc.add_heading(key[0:-1],level=4)#指定样式标题4设置标题样式为黑色宋体(heading)forlineinvalue.split("\n"):my_word_doc.add_paragraph(line)my_word_doc.save(r"C:\Users\xxx\Downloads\temp.docx")解析PowerShell命令的帮助文本(r"C:\Users\xxx\Downloads\Get-CimClass.txt")#有道翻译的新版翻译结果解析实在是太变态了,我搞不了,是在不行就把格式弄好,使用文档翻译翻译吧。#翻译结果=执行翻译()翻译结果=帮助文件解析结果word()
以上就是“python-docx怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注主机评测网行业资讯频道。
上一篇:Python中常用的函数是什么
输入法切换键是哪个键?输入法切
冬月是哪一个月?冬月是什么意思
个人所得税退税金额怎么算出来的
输入法全角和半角有什么区别?输
a4纸尺寸是多少厘米?a4纸的由来
个人所得税扣除标准?个人所得税
输入法哪个好用?输入法介绍
卡拉OK是哪个国家发明的?卡拉OK
mikutools原神网页版入口链接?m
关机特别慢什么原因?电脑和手机