鱼C论坛

 找回密码
 立即注册
查看: 1725|回复: 4

[已解决]如何一直搜索,直到没有关键字

[复制链接]
发表于 2023-7-20 15:56:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个是每个文件搜索到第一个就不继续了,如何修改让他把这个文件一直搜索完

import os

def search_keywords_in_html(directory, keyword):
    files = os.listdir(directory)
    for file in files:
        if file.endswith('.html'):
            file_path = os.path.join(directory, file)
            with open(file_path, 'r', encoding='UTF-8') as f:
                content = f.read()
                if keyword in content:
                    keyword_index = content.index(keyword)
                    start_index = max(0, keyword_index - 10)
                    end_index = min(len(content), keyword_index + len(keyword) + 10)
                    context = content[start_index:end_index]
                    print(f"Found '{keyword}' in {file}. Context: {context}")

# 指定要搜索的目录和关键字
directory = 'f:\\'
keyword = input('请输入要查询的内容:')

search_keywords_in_html(directory, keyword)
最佳答案
2023-7-20 15:56:45
你好!根据你的要求,以下是修改后的代码,让它能够一直搜索到文件结束:
import osdef search_keywords_in_html(directory, keyword):    files = os.listdir(directory)        for file in files:        if file.endswith('.html'):            file_path = os.path.join(directory, file)                        with open(file_path, 'r', encoding='UTF-8') as f:                content = f.read()                                keyword_index = content.find(keyword)                while keyword_index != -1:                    start_index = max(0, keyword_index - 10)                    end_index = min(len(content), keyword_index + len(keyword) + 10)                    context = content[start_index:end_index]                                        print(f"Found '{keyword}' in {file}. Context: {context}")                                        keyword_index = content.find(keyword, keyword_index + 1)# 指定要搜索的目录和关键字directory = 'f:\\'keyword = input('请输入要查询的内容:')search_keywords_in_html(directory, keyword)
主要的修改包括:
- 使用content.find(keyword, keyword_index + 1)来继续搜索下一个关键字的索引。find()函数会返回关键字在字符串中的索引位置,如果找不到则返回-1。
- 使用循环while keyword_index != -1来持续搜索,直到找不到关键字。

这段代码会在指定目录下的所有.html文件中搜索指定的关键字,并输出找到的结果及其上下文。

希望能帮到你!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-20 15:56:45 | 显示全部楼层    本楼为最佳答案   
你好!根据你的要求,以下是修改后的代码,让它能够一直搜索到文件结束:
import osdef search_keywords_in_html(directory, keyword):    files = os.listdir(directory)        for file in files:        if file.endswith('.html'):            file_path = os.path.join(directory, file)                        with open(file_path, 'r', encoding='UTF-8') as f:                content = f.read()                                keyword_index = content.find(keyword)                while keyword_index != -1:                    start_index = max(0, keyword_index - 10)                    end_index = min(len(content), keyword_index + len(keyword) + 10)                    context = content[start_index:end_index]                                        print(f"Found '{keyword}' in {file}. Context: {context}")                                        keyword_index = content.find(keyword, keyword_index + 1)# 指定要搜索的目录和关键字directory = 'f:\\'keyword = input('请输入要查询的内容:')search_keywords_in_html(directory, keyword)
主要的修改包括:
- 使用content.find(keyword, keyword_index + 1)来继续搜索下一个关键字的索引。find()函数会返回关键字在字符串中的索引位置,如果找不到则返回-1。
- 使用循环while keyword_index != -1来持续搜索,直到找不到关键字。

这段代码会在指定目录下的所有.html文件中搜索指定的关键字,并输出找到的结果及其上下文。

希望能帮到你!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 15:56:48 | 显示全部楼层
要实现一直搜索,直到没有找到关键字,你可以在 `search_keywords_in_html` 函数中添加一个循环来遍历所有文件。当找到关键字后,可以设置一个标志来指示是否继续搜索。

以下是修改后的代码示例:

```python
import os

def search_keywords_in_html(directory, keyword):
    files = os.listdir(directory)
    found_keyword = False  # 标志变量,指示是否找到关键字
   
    for file in files:
        if file.endswith('.html'):
            file_path = os.path.join(directory, file)
            with open(file_path, 'r', encoding='UTF-8') as f:
                content = f.read()
                if keyword in content:
                    keyword_index = content.index(keyword)
                    start_index = max(0, keyword_index - 10)
                    end_index = min(len(content), keyword_index + len(keyword) + 10)
                    context = content[start_index:end_index]
                    print(f"Found '{keyword}' in {file}. Context: {context}")
                    found_keyword = True  # 设置标志为 True,表示找到关键字
   
    if not found_keyword:  # 如果没有找到关键字,则继续搜索子目录
        subdirectories = [os.path.join(directory, subdirectory) for subdirectory in os.listdir(directory) if os.path.isdir(os.path.join(directory, subdirectory))]
        for subdirectory in subdirectories:
            search_keywords_in_html(subdirectory, keyword)

# 指定要搜索的目录和关键字
directory = 'f:\\'
keyword = input('请输入要查询的内容:')

search_keywords_in_html(directory, keyword)
```

在这个修改后的代码中,我们添加了一个标志变量 `found_keyword`,用于指示是否找到了关键字。如果在当前目录下没有找到关键字,那么我们会继续搜索子目录。这样就实现了一直搜索,直到没有找到关键字的功能。

希望这能解决你的问题!如果还有其他疑问,请随时提问。
求给个最佳答案呗

此回答源于ChatGPT,若有不正确之处,请多包容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 15:56:57 | 显示全部楼层
你的代码已经很接近了。现在的问题是,你的代码一旦在文件中找到一个关键字,就会停止继续搜索。为了解决这个问题,你可以改变你的搜索策略,从使用字符串的  index()  方法(该方法只会返回第一个匹配的索引),改为使用  find()  方法,这个方法可以让你从一个指定的位置开始查找。

以下是修正过的代码:
import osdef search_keywords_in_html(directory, keyword):    files = os.listdir(directory)    for file in files:        if file.endswith('.html'):            file_path = os.path.join(directory, file)            with open(file_path, 'r', encoding='UTF-8') as f:                content = f.read()                start_search = 0                while True:                    keyword_index = content.find(keyword, start_search)                    if keyword_index == -1:  # 如果没有找到关键词,跳出循环                        break                    start_index = max(0, keyword_index - 10)                    end_index = min(len(content), keyword_index + len(keyword) + 10)                    context = content[start_index:end_index]                    print(f"Found '{keyword}' in {file}. Context: {context}")                    start_search = keyword_index + len(keyword)  # 更新搜索的起始位置# 指定要搜索的目录和关键字directory = 'f:\\'keyword = input('请输入要查询的内容:')search_keywords_in_html(directory, keyword)
上述代码的主要改动是,我们添加了一个  while  循环来持续查找关键字,直到  find()  方法返回  -1 ,表示无法找到更多的关键字。我们还需要更新  start_search  变量,使其从上次找到的关键字之后开始查找,以避免重复找到相同的关键字。

这样修改之后,代码应该可以在整个文件中持续查找关键字,直到文件的末尾。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 19:56:59 | 显示全部楼层
陶远航 发表于 2023-7-20 15:56
你好!根据你的要求,以下是修改后的代码,让它能够一直搜索到文件结束:

我中间嵌入一段代码就会出错 为啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 09:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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