精华内容
下载资源
问答
  • Python加密word文档

    多人点赞 2021-08-15 18:38:23
    本期我们需要完成一个对word文档加密的程序。在翻阅了网上一些资料和文章后,认为使用‘异或’来加密word文档是比较方便且安全性有保障的。   在此之前,我们先了解一下异或是什么。简单来说,如果a、b两个值不...

      大家好,这里是滑稽研究所。本期我们需要完成一个对word文档加密的程序。在翻阅了网上一些资料和文章后,认为使用‘异或’来加密word文档是比较方便且安全性有保障的。
      在此之前,我们先了解一下异或是什么。简单来说,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。我们简单的梳理一下代码思路。代码分为两部分,加密和解密。
      1.加密
      把文件转换成二进制的格式,然后生成等长的随机密钥进行异或操作,得到加密后的二进制文件。这一步我们需要保留的数据有,加密后的文件和随机生成的密钥,当然他们都是一些二进制数。
      2.解密
      这一步就简单了,我们把加密后的文件和之前随机生成的密钥再进行一次异或操作,即可得到原本的二进制数,然后我们再把它转换成文本即可。
    OK,思路大致明了了,我们需要两个程序,加密程序接收str参数 ,运行完成会输出加密后的二进制word文档,和用于解密的二进制密钥。解密程序则需要接收两个int参数,分别为加密程序输出的两个二进制内容,异或之后输出原始文本。那么,上代码。
    加密代码:

    from secrets import token_bytes
    from docx import Document
    import docx
    import time
    ​
    def random_key(length):
        # token_bytes,函数接受一个int参数,用于指定随机字节串的长度。
        # int.from_bytes把字节串转换为int,也就是我们需要的二进制数
        key = token_bytes(nbytes=length)
        key_int = int.from_bytes(key, 'big')
        return key_int
    ​
    def encrypt(raw):
        raw_bytes = raw.encode()
        #参数big意为正序,little则输出反序。
        raw_int = int.from_bytes(raw_bytes, 'big')
        key_int = random_key(len(raw_bytes))
        return raw_int ^ key_int, key_int
    ​
    def decrypt(encrypted, key_int):
        decrypted = encrypted ^ key_int
        length = (decrypted.bit_length() + 7) // 8
        decrypted_bytes = int.to_bytes(decrypted, length, 'big')
        return decrypted_bytes.decode()def encrypt_file(path, key_path=None,):
        document = Document(path)
        all_paragraphs = document.paragraphs
        file = docx.Document()
        file2 = docx.Document()
    ​
        jkl = input('请输入希望保存的文件名:') + '.docx'for paragraph in all_paragraphs:
            # 打印每一个段落的文字
            zz,key = encrypt(paragraph.text)#print('加密:',zz)
            #print('key:', key)file.add_paragraph(str(zz))
            file.save(jkl)
    ​
            file2.add_paragraph(str(key))
            file2.save("key.docx")print('滑稽研究所出品!')
    print('仅支持英文文件名。')
    chenggong = encrypt_file(input('请输入需要加密的文件名:'))
    print("已完成!十秒后自动关闭")
    time.sleep(10)
    #生成加密文件
    

      通过 encode 方法,将字符串编码成字节串。int.from_bytes 函数将字节串转换为 int 对象。最后对二进制对象和随机密钥进行异或操作,就得到了加密文本。
    解密代码:

    from secrets import token_bytes
    from docx import Document
    import docx
    import time
    ​
    def random_key(length):
        # token_bytes,函数接受一个int参数,用于指定随机字节串的长度。
        # int.from_bytes把字节串转换为int,也就是我们需要的二进制数
        key = token_bytes(nbytes=length)
        key_int = int.from_bytes(key, 'big')
        return key_int
    ​
    def encrypt(raw):
        raw_bytes = raw.encode()
        raw_int = int.from_bytes(raw_bytes, 'big')
        key_int = random_key(len(raw_bytes))
        return raw_int ^ key_int, key_int
    ​
    def decrypt(encrypted, key_int):
        decrypted = encrypted ^ key_int
        length = (decrypted.bit_length() + 7) // 8
        decrypted_bytes = int.to_bytes(decrypted, length, 'big')
        return decrypted_bytes.decode()
    ​
    jjj = []
    kkk = []def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
        document = Document(path_encrypted)
        all_paragraphs = document.paragraphs
    ​
        do2 = Document('key.docx')
        all_p= do2.paragraphs
    ​
        for i in all_paragraphs:
            #str转int
            jiam = int(i.text)
            jjj.append(jiam)#print('加密:',jiam)
        #print(jjj)for k in all_p:
            #str转int
            key = int(k.text)
            kkk.append(key)#print('key:',key)
        #print(kkk)
    ​
        cc = zip(jjj,kkk)
        res = list(cc)
        return res
    #传入元组,或两个int。
    print('滑稽研究所出品!')
    print('警告,严禁修改密钥文件名!!!')
    print('直接输入文件名,无需格式后缀。')
    rr1 = decrypt_file(input("请输入需要破解文件的文件名(仅限.docx文件):")+'.docx')file = docx.Document()
    for i in rr1:
        ff = decrypt(*i)
        #print(ff)
        #print(type(ff))
        file.add_paragraph(ff)
    file.save("res.docx")
    print('解密完成,请在当前文件夹下提取文件!')
    print('十秒后自动关闭!')
    time.sleep(10)
    

      我们需要将两个程序打包成exe。运行加密程序得到的二进制word文档,可以给其他人,但密钥必须自己保存。当别人满足你的要求之后,我们可以把密钥和解密程序给他。注意,只对docx文件有效,且不可以修改密钥文件的名称,不然会报错,解密失败。
      运行结果:
      原始word文件。
    在这里插入图片描述
      加密后:
    在这里插入图片描述
      生成的key密钥:
    在这里插入图片描述

      加密后的文件和生成的密钥,放在解密程序文件夹下之后,会得到如下。我们得到了原文件,美中不足的是所有的首行缩进都消失了,变成了左对齐。
    在这里插入图片描述
      同样的文件,重新加密之后,会得到不同的加密文件和密钥。因此如果加密文件和密钥不匹配,即使他们的源文件是一样的,也是无法解密的。此外密钥丢失,加密的文件将永远不能解密。噢,我的上帝。如果有人能一个个试出来等长的随机密钥的话。如果猴子能写出来《巴黎圣母院》的话。
      如果你对异或文本加密感兴趣的话,可以看一下这篇文章,感谢该作者提供了思路。

    https://blog.csdn.net/xiaofeixia666888/article/details/102613213

    展开全文
  • 使用pythonword文档转换为PDF文档

    千次阅读 2020-11-25 20:32:00
    欢迎关注”生信修炼手册”!对于windows系统的编程开发,微软一开始提供了基于VB语言的接口,后来又推出了.NET框架。对于word等offices套件的自动化操作,由于原生支持的特性...

    欢迎关注”生信修炼手册”!

    对于windows系统的编程开发,微软一开始提供了基于VB语言的接口,后来又推出了.NET框架。对于word等offices套件的自动化操作,由于原生支持的特性,采用这些语言是最为方便且灵活的,唯一的缺点就是这些语言的学习成本相对较高。

    python以简洁易学而出名,在python中,也提供了pywin32这样的模块,对windows官方的API进行了封装,适用于windows平台的编程开发。其功能涵盖了windows平台的方方面面,对于处理word文档这样的任务,自然是远远胜任的。

    对于win32模块,将word文档另存为pdf的代码如下

    >>> import win32com
    >>> from win32com.client import Dispatch
    >>> word = Dispatch('Word.Application')
    >>> doc = word.Documents.Open('C:/Users/Test/Desktop/out.docx')
    >>> doc.SaveAs('C:/Users/Test/Desktop/output.pdf', 17)
    >>> doc.Close()
    >>> word.Quit()

    需要注意的一点就是,文件需要采用绝对路径,注意上述绝对路径的写法,没有用经典的\\写法,因为这样的写法存在字符转移等问题,用/写法,可以最大程度的保证路径的正确。

    为了更加方便的完成word转换pdf的任务,还有一个简历在pywin32基础上的模块-docx2pdf, 该模块支持windows和macOS两个平台,可以方便的批量完成word文档转pdf的任务,基本用法如下

    >>> from docx2pdf import convert
    >>> convert("C:/Users/Test/Desktop/out.docx", "C:/Users/Test/Desktop/output.pdf")

    在实际测试中,会遇到如下错误

    AttributeError: Word.Application.Application

    这个报错只是在关闭word进程时的报错,并不会影响转换的pdf文件。当有批量的word需要转换时,用docx2pdf模块,更加的方便。

    该模块提供了一个转换脚本,这样通过命令行就可以批量处理了,基本用法如下

    # 转换单个文件
    docx2pdf myfile.docx
    # 将一个目录下的word文档都转换成pdf文件
    docx2pdf myfolder/

    通过上述方法,可以轻松完成word文档的转换任务,虽然效率上没有那么高,但是胜在免费,而且操作也比较简便。

    ·end·

    —如果喜欢,快分享给你的朋友们吧—

    原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

    本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

      更多精彩

      写在最后

    转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

    扫描下方二维码,关注我们,解锁更多精彩内容!

    一个只分享干货的

    生信公众号

    展开全文
  • Python-生成word、docs文件[生成word文档]方法一:写入新建文档安装第三方库实现代码运行结果注意方法二:运用模板写入word文档安装第三方库创建模板或修改模板实现代码实现效果注wps加密文档word加密文档 ...

    方法一:写入新建文档

    安装第三方库

    pip install python-docx
    

    实现代码

    # pip install python-docx
    from docx import Document
    from docx.shared import Pt
     
    # 简单的打开word,输入数据,关闭word
    document = Document()
    # 向word里增加段落
    document.add_paragraph('hello')
    document.save('./doc/test.docx')
      
    # 在一个段落中增加文字
    document = Document()
    paragraph = document.add_paragraph('Hello, ')
    # 增加文字
    paragraph.add_run('tgenkidu')
      
    # 设置word字体大小
    style = document.styles['Normal']
    font = style.font
    font.size = Pt(10)
    document.save('./doc/test.docx')
    

    运行结果

    在这里插入图片描述
    在这里插入图片描述

    注意

    运行python时,要写入的word文档应处于关闭状态。

    方法二:运用模板写入word文档

    本例创建了 模板.docx生成模板2.docx,也可使用已有模板进行修改,加以应用。

    安装第三方库

    pip3 install docxtpl -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
    

    因直接安装报错,所以选择了国内的库

    创建模板或修改模板

    将所填空使用{{ }}重命名,如图
    在这里插入图片描述

    实现代码

    import datetime
    from docxtpl import DocxTemplate, RichText
    # pip3 install docxtpl -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
    
    def generate_report(tpl_file, report_file):
        tpl= DocxTemplate(tpl_file)
        context = {
            'time' : datetime.datetime.now(),
            'biaoti' : "标题",
            'mingzi' : "名字"
        }
        tpl.render(context)
        tpl.save(report_file)
    
    def main():
        tpl_file = "./doc/模板.docx" 
        report_file = "./doc/模板2.docx"
        generate_report(tpl_file, report_file)
    
    if __name__ == "__main__":
    	main()
    

    实现效果

    在这里插入图片描述

    若不想他仍更改生成好的word文档,可将文档加密使用。

    wps加密文档

    文件>选项>安全
    在这里插入图片描述

    word加密文档

    审阅>限制编辑
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • pythonword文档里插入文件对象

    千次阅读 热门讨论 2020-05-28 12:31:05
    工作需要制作每周一次的汇总报表,除了正文以外,还需要把上周的各种报表以附件的方式打包到报表里,有word文档,有excel表格,手工操作是这样的:插入-对象-由文件创建-勾选显示为图标-选择文件-确认,如图:!...

    工作需要制作每周一次的汇总报表,除了正文以外,还需要把上周的各种报表以附件的方式打包到报表里,有word文档,有excel表格,手工操作是这样的:插入-对象-由文件创建-勾选显示为图标-选择文件-确认,如图:
    在这里插入图片描述
    插入后效果,双击图标可以打开:在这里插入图片描述
    看似简单的工作,但是一共有12个文件,目录不全相同,每次选择要选一次目录,费时费力还容易搞错。想用python来解决问题,发现python-docx只能插入图片,不能插入文件对象,在网上泡了几天没能找到方法。
    没办法只好自己动手,我们知道docx实际上是一个压缩文件,解压缩后分析,在word\embeddings找到了这些插入的文件(注意文件名):
    在这里插入图片描述
    那么是否可以替换掉这些文件然后再打包来达到我的目的,经过手工测试后发现行得通,下一步就是写代码了。
    过程就不说了,绕了很多弯,碰了不少壁,现在分享一下心得和代码:
    1.需要先制作word模版文件,要包含插入的文件对象,插入的文件对象可以是空文件,但是对象的文件名不能更改;
    2.根据模版文件写入新word文件;
    3.解压word文件;
    4.替换掉word\embeddings的附件,注意顺序和文件名;
    5.重新压缩还原word文件,这一步需要注意的是压缩格式,python zipfile包默认的格式office不认,要指定格定为DEFLATED。
    下面是3-5步的代码:

    #filename为相关文件列表,filename[0]就是需要处理的主word文件,filename[1]-[12]是12个需要插入的附件
    import os,zipfile,shutil       #需要用到的包
    azip = zipfile.ZipFile(filename[[0])          #以压缩格式打开word文件
    tempdir=''
    while True:
        tempdir= ''.join(random.sample(string.ascii_letters + string.digits, 8))   #生行8位临时文件夹名
        if not os.path.exists(tempdir):
            break
    os.mkdir(tempdir)                  #创建临时目录
    os.chdir(tempdir)                   #转到临时目录
    azip.extractall()                     #解压word文件到临时文件夹
    azip.close()                           #关闭word文档,否则后面重新压缩会报错
    #把正确文件拷贝覆盖模版文件的空附件
    try:
        shutil.copy(filename[1],'word\\embeddings\\Microsoft_Excel____.xlsx')
        shutil.copy(filename[2],'word\\embeddings\\Microsoft_Excel____1.xlsx')
        shutil.copy(filename[3],'word\\embeddings\\Microsoft_Excel____2.xlsx')
        shutil.copy(filename[4],'word\\embeddings\\Microsoft_Excel____3.xlsx')
        shutil.copy(filename[5],'word\\embeddings\\Microsoft_Excel____4.xlsx')
        shutil.copy(filename[6],'word\\embeddings\\Microsoft_Word___.docx')
        shutil.copy(filename[7],'word\\embeddings\\Microsoft_Word___5.docx')
        shutil.copy(filename[8],'word\\embeddings\\Microsoft_Word___6.docx')
        shutil.copy(filename[9],'word\\embeddings\\Microsoft_Word___7.docx')
        shutil.copy(filename[10],'word\\embeddings\\Microsoft_Word___8.docx')
        shutil.copy(filename[11],'word\\embeddings\\Microsoft_Word___9.docx')
        shutil.copy(filename[12],'word\\embeddings\\Microsoft_Word___10.docx')
        azip = zipfile.ZipFile(filename[0], 'w')    #以压缩格式新建word文档
        for i in os.walk('.'):                             #使用os.walk遍历整个目录及子目录,保证原有的目录结构不变
            for j in i[2]:
                azip.write(os.path.join(i[0],j), compress_type=zipfile.ZIP_DEFLATED)     #将文件逐个打包到word文档中,压缩格式指定为ZIP_DEFLATED
        azip.close()                                       #关闭文件
        os.chdir('..')
        shutil.rmtree(tempdir,ignore_errors=True)    #删除临时文件夹
    except:
        pass
    

    PS:除了word文件,其他的office文档插入的文件对象也可以照这个思路处理。

    展开全文
  • python获取word文档和pdf文档页数的方法 1、获取pdf页码数 这里要使用到 pdfplumber 这个库,首先导入 没有安装的同学还需要先安装 pip install pdfplumber import pdfplumber from pdfminer.pdfparser import ...
  • 遇到这样一个需求:需要定位到Word文档中的每个书签,并对书签内容进行替换.具体用法在这里记录一下: 这里主要用到的是python中的win32com模块 1.获取word文档中的所有书签 代码如下: from win32com import client ...
  • 使用时如果需要多次调用,最后每次调用均开启后关闭,否则libreoffice会创建一个缓存文档并越用越大,处理时间会增加。 class OfficeProcess(object): def __init__(self): self.p = 0 subprocess.Popen('find /...
  • python处理word文档

    2021-08-27 22:40:52
    python处理word实现自动化办公 环境安装 使用Python操作word大部分情况都是写操作,也有少许情况会用到读操作,在本次教程中都会进行讲解,本次课程主要用到以下4个库,请大家提前安装。 升级pip(便于安装最新库...
  • 来源:超级大洋葱806环境安装使用Python操作word大部分情况都是写操作,也有少许情况会用到读操作,在本次教程中都会进行讲解,本次课程主要用到以下4个库,请大家提前安装。升级pip(便于安装最新库)python -...
  • 本文使用 Zhihu On VSCode 创作并发布在之前的文章[1] [2]中,我用python-docx这个包读取外部数据,驱动了word文档的更新,相当于是实现了Excel数据往word文档的数据流动。实现的方式比起之前依靠vba用Excel驱动word...
  • python合并word文件

    千次阅读 2020-05-11 14:46:36
    合并一个文件夹内的所有word文档,并且按照文件的顺序进行合并。 2、代码 import os #输入输出函数,用来获取目录路径 import win32com.client as win32 word = win32.gencache.EnsureDispatch(‘Word.Application’...
  • 1、实现批量导入word文档,取文档标题中的数字作为编号 2、除取上面打钩的内容需要匹配出来入库入库,其他内容全部直接入库mysql # wuyanfeng# -*- coding:utf-8 -*-# 读取docx中的文本代码示例import docximport ...
  • 使用python-docx编辑word文档需要解决的问题安装python-docx 包功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容...
  • 上个月领导交给我一个非常紧急的任务,限我2天之内完成。...找到word文档——>全选复制——>粘贴到新文档——>调整格式——>核对检查,完成一次操作至少得3分钟。合并完这200多份报...
  • 最近需要重复写格式一致的Word文件,包含了标题和表格,并要根据数据文件填写表格内容,通过python-docx工具自动生成Word文件。
  • python替换word中的文字内容

    万次阅读 多人点赞 2018-07-05 14:32:46
    摘要:这篇文章介绍了如何使用python【3.6版本】把pdf文件转换为word文档并替换word文档中的文字内容,这里替换的规则是中英转换或者其它自定义规则pdf转换为wordpdf文件由于很难编辑,因而想要通过编程修改内容有些...
  • 设置表格样式,具体可以查看python-docx的表格样式库 table.style = 'Table Grid' import argparse import pymysql from pymysql import OperationalError from docx import Document ReportSql = """ SELECT ...
  • 使用Python打印Word增强版

    千次阅读 2020-07-24 10:17:52
    # -------------------------------------------------------- # 获取当前工作目录(仅在测试中使用,具体使用可以注释掉,并修改open_file为要打开的word文档地址即可) path = os.getcwd() + r'/Aine.docx' # 要打开...
  • 在上次文章中,我们学习了【用python写入excel】,这次我们学习Pythonword文档吧!场景:有时候,办公室需要按模版生成的固定的文件,模板是固定的,只是每次需要替换信息。如下图的收入证明,模版中所有标黄的都...
  • Python使用win32com获取Word文档总页码/页数

    千次阅读 热门讨论 2021-01-05 21:06:31
    Python处理Word文档,该文档除了标题之外是一个很长的表格,会随着填充内容长短变化自动换行。 试过docx库,没找到页码设置及页数统计,整个文档的sections=1,无法看出页数。试了w.ActiveDocument....
  • 情景2:如果你拿到的是一个文件夹,打开之后,里面杂乱无章的充斥着各种文件,你也不确定word文档都在哪,那么你需要使用Everything来手动提取出所有的word文档,虽然我也可以让脚本实现这个功能,但是使用脚本需要...
  • 运行时,AttributeError: 'NoneType' object has no attribute 'paragraphs'的错误,... # 关闭文件 doc.close() # 退出word mw.Quit() path=r'‪C:\Users\cuichuang1\Desktop\aaa.docx' readWord(path) ```
  • ● 研二在读学生,非工科非计算机专业,故代码简陋初级勿喷,本文仅为记录和快乐分享。 ○ 感谢肯定,转载请注明本页出处即可。...python识别word文件格式——(基于python编写简单office阅卷程序①) ...
  • Python后端获取页面传过来的word文档读取 diqing = request.FILES.get('diqing_file') # 敌情通报 # open无法直接打开docx文件,将文件转回为字节流的格式传给document类识别 diqing= io.BytesIO(diqing.read()...
  • 使用python修改word文件

    千次阅读 2020-07-24 10:15:45
    通过使用Python修改Word文件 import os import win32com from self import self from win32com.client import Dispatch # -------------------------------------------------------- # -- 需要修改的参数 # ---...
  • 作者:小小明 文章目录doc格式批量转为docx批量提取docx文档的图片批量图片格式转换完整代码GUI图形化工具开发打包exe...即使你知道可以把word文档用压缩文件打开,逐个解压的话依然会耗时较长时间,另外里面掺杂了d.
  • 依赖包1.pywin32 (http://sourceforge.net/projects/pywin32/)代码1.初始化# 引入库import win32comfrom win32com.client import Dispatch, constants# 这种打开方式,比 win32...Word.Application")更好# ...
  • Python3.6 word批量转换为txt提取

    千次阅读 2020-10-19 12:52:49
    1.word文件放入:D:\jianli ,文件夹下放入 一个word文件 代码如下: 注意导入库 mport os import re import sys import psutil import win32com.client as wc import configparser import time # -*- coding...
  • pythonword表格转写入excel

    千次阅读 2019-09-30 20:15:57
    用到 python-docx 和 pandas 分别处理 word 和 excel。 安装 python-docx:pip install python-docx,它不接受 .doc 文件,先转存为 .docx。 下面从 test.docx 读入,写到 test.xlsx。 code from ...
  • 本文以替换为例,讲解一下如何使用Pythonword中使用“通配符模式”(类似于正则表达式)替换文本内容。 #!/usr/bin/env python # -*- coding:utf-8 -*- import os import win32com from win32com.client...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,656
精华内容 3,862
关键字:

python关闭word文档

python 订阅