zhangauckland 2020-08-17 12:10 采纳率: 0%
浏览 503
已采纳

使用Python搜索一特定目录下所有文件中的关键词

我尝试使用Python搜索一特定目录下所有文件中的关键词。代码如下:

#!/usr/bin/python
#encoding:UTF-8

import os
import docx
from docx import *

#判断文件中是否包含关键字,是则将文件路径打印出来
def is_file_contain_word(file_list, query_word):
for _file in file_list:
if query_word in open(_file).read():
print (_file)
print("Finish searching.")

#返回指定目录的所有文件(包含子目录的文件)

def get_all_file(floder_path):
file_list = []
if floder_path is None:
raise Exception("floder_path is None")
for dirpath, dirnames, filenames in os.walk(floder_path):
for name in filenames:
file_list.append(dirpath + '\' + name)
return file_list

query_word = input("Please input the key word that you want to search:")

basedir = input("Please input the directory:")

is_file_contain_word(get_all_file(basedir), query_word)

input("Press Enter to quit.")

测试的目录为D:\test。内含一个word文档和一个子文件夹,子文件夹下有一个word文档。

输入关键词和目录后,得到如下信息:
Please input the key word that you want to search:'Shengaiwei'
Please input the directory:D:\test
Traceback (most recent call last):
File "C:\Users\c*\AppData\Local\Programs\Python\Python38\kword\kword7.py", line 29, in
is_file_contain_word(get_all_file(basedir), query_word)
File "C:\Users\c*\AppData\Local\Programs\Python\Python38\kword\kword7.py", line 11, in is_file_contain_word
if query_word in open(_file).read():
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa2 in position 50: illegal multibyte sequence

烦请各位大侠帮助指导,谢谢!

  • 写回答

2条回答 默认 最新

  • jingluan666 2020-08-17 15:21
    关注

    使用docx解析word文档

    def is_file_contain_word(file_list, query_word):
        for _file in file_list:
            extension = os.path.splitext(_file)[1].lower()
    
            if extension=='.docx' :
                doc = docx.Document(_file)
                for paragraph in doc.paragraphs:
                    if query_word in paragraph.text:
                        print(_file)
                        break
            else:
                content=open(_file).read()
                if query_word in content:
                    print (_file)
        print("Finish searching.")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 backtrader对于期货交易的现金和资产计算的问题
  • ¥15 求C# .net4.8小报表工具
  • ¥15 安装虚拟机时出现问题
  • ¥15 Selenium+docker Chrome不能运行
  • ¥15 mac电脑,安装charles后无法正常抓包
  • ¥18 visio打开文件一直显示文件未找到
  • ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
  • ¥50 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!
  • ¥50 怎么获取Ace Editor中的python代码后怎么调用Skulpt执行代码
  • ¥30 fpga基于dds生成幅值相位频率和波形可调的容易信号发生器。