吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2245|回复: 5
收起左侧

[Python 原创] 【Python】批量获取多个docx文档中特定段落源码

[复制链接]
BIGOcean 发表于 2020-7-6 14:47

介绍

用  于 :提取多个包含某一关键词的docx文档。例如:有100个docx文档中,需要你提取这100个docx文档中所有包含“本院认为”的段落

实现效果 :运行脚本,等待提取符合要求的段落后,脚本自动将符合要求的段落保存在同目录下的一个新建txt文件内

脚本需求 :需要安装docx模块,相关安装代码:pip install docx

源码

import docx
import re
import os

def getpara(path):
    try :
        docx_temp = docx.Document(path)
    except :
        print("打不开呀")
        return False
    try :
        docx_para = docx_temp.paragraphs
        print("成功读取:",path)
        return docx_para
    except :
        print("can't get the ",path," paragraphs")
        return False

def findpara(paras, str="本院认为"):
    try:
        para_list = ["赋值待删"]
        pattern = re.compile(str)
        for para in paras:
            match1 = pattern.search(para.text)
            if match1:
                para_list.append(para.text)

        para_list.pop(0)
        return para_list
    except:
        return False

def list2txt(list,name="汇总输出") :
    if len(list) :
     try :
        fp = open("汇总输出.txt","a")
        for cloe in list :
            fp.write(cloe)
            fp.write("\n")
     except :
        return False
     finally:
        fp.close()

def set_wd(wd='0') :
    if wd == 'C:/Users/Administrator/Desktop/基层法院' :
        try :
            os.chdir(wd)
            File_List = os.listdir(wd)
            return File_List
        except :
            print("目录有问题")
            return False
    else :
        try :
            wd = os.getcwd()
            os.chdir(wd)
            print("使用当前路径名")
            File_List = os.listdir(wd)
            return File_List
        except :
            print("Error")
            return False

wd='C:/Users/Administrator/Desktop/基层法院'
File_list=set_wd(wd='C:/Users/Administrator/Desktop/基层法院')
for i in File_list:
    paths = 'C:/Users/Administrator/Desktop/基层法院/'+i
    docx_para=getpara(paths)
    para_list=findpara(docx_para, i, str="本院认为")
    list2txt(para_list, name="汇总输出")

思路(从调用函数上一步一步讲:)

分析wd='C:/Users/Administrator/Desktop/基层法院'

首先给wd赋一个地址值,也就是你100个文档所在的目录(注意地址分隔符用'/'而不要用'\',原因是后者为转义符。会和地址中的字母符号组合转义导致报错)  

分析 File_list=set_wd(wd='C:/Users/Administrator/Desktop/基层法院')


观察调用语句:首先调用了set_wd函数,判断如果wd和默认地址相同就调用os模块的chdir函数以获取目录下所有文件的名称(包含后缀)并在内存中组建一个file list列表。最后返回一个file list的值赋值给File_list。

分析 for i in File_list

Python的循环为for in循环,我理解为遍历。从file list内逐行赋值给i

分析 paths = 'C:/Users/Administrator/Desktop/基层法院/'+i

给paths逐个赋“基层法院”文件夹内所有文件的具体地址值,(比如:C:/Users/Administrator/Desktop/基层法院/张三防卫过当案审判书.docx)

分析 docx_para=getpara(paths)


接下来调用getpara函数,将上面paths获取docx文件具体地址值之后,作为实参带入到getpara函数内。这里做一个try语句的目的是避免文件夹内非docx文件被读取而报错。然后调用docx模块的document函数以读取当前文档的段落,如果读取成功就把段落返回给docx_para函数。不成功的话,可能是文档有密码或者文档被损坏,或者就是所读取的文档是doc格式而不是docx,这就需要格式转换一下了。

分析 para_list=findpara(docx_para,str="本院认为")


这里调用了有2个形参的findpara函数,2个实参分别为①文档所有段落②段落关键词str="本院认为"
findpara函数首先给paralist随便赋一个值,然后就开始对所有获取的段落进行搜寻,找到包含str关键词的段落后,就用append追加到段落列表para_list里。然后用pop(0)把最开始任意赋的值给删除掉。然后将包含关键词的段落返回给para_list。

分析 list2txt(para_list, name="汇总输出")


最后就理所应当的是把所有关键段落保存在一个新建的txt文档里,open函数新建或者打开"汇总输出.txt",然后打开方式为"a",也就是追加的意思。然后就是一系列写入、换行、然后finally关闭文件的操作。


好了,分析就这样结束了。本人接触Python的次数不多。所以写这些也是照着大一上半年的c语言函数写的。目的是为了稍微稍微稍微的接触一下Python的一小些常用语句。欢迎大佬帮萌新斧正代码,或者补充一些小技巧小知识。

免费评分

参与人数 4吾爱币 +10 热心值 +3 收起 理由
yasinana + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ballhou + 1 稍微改动下,是不是就成了word内容搜索神器了?
nanscript + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qhczdy 发表于 2020-7-6 15:13
谢谢分享
 楼主| BIGOcean 发表于 2020-7-6 15:29
当你遇到一个问题可以用正则表达式解决时,你就有了两个问题。
kenjsyg 发表于 2020-7-6 16:08
hj170520 发表于 2020-7-6 23:08
谢谢分享
mikeee 发表于 2020-7-6 23:18
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-18 23:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表