【问题标题】:How to find if a word is in a text file and add the name of the file to a dictionary?如何查找一个单词是否在文本文件中并将文件名添加到字典中?
【发布时间】:2020-12-02 20:22:10
【问题描述】:

我一直被这个问题困扰:

我得到一个文本文件列表(例如“ZchEuxJ9VJ.txt”、“QAih70niIq.txt”),每个文件都包含一个随机生成的段落。我将编写一个解析器,它将从文件夹中列出的每个文件中提取单个单词。我的最终目标是创建一个字典,其中的键代表在我的文件中找到的各个单词。这些值应该是包含该单词的文件列表。例如,如果我打印('happy:', search['happy']),则应将包含单词happy 的文件作为值添加到我的字典中。如果这个词是一个“新”词,我将不得不第一次设置它。如果该词不是“新”词,我将不得不更新与该词关联的列表。我还必须确保不会将相同的文件名添加到同一个单词两次。

我已经创建了一个名为search 的新字典,访问了每个文件并打开它们进行阅读,然后使用split() 方法隔离每个单词。我正在努力解决的问题是如何“找到”特定文件中的单词并标记可以在哪个文件中找到单词。我尝试“搜索”文件中的单词然后将文件添加到字典中,但这会给我一条错误消息。

【问题讨论】:

标签: python


【解决方案1】:

与其在文件中搜索单词,不如反其道而行之。你知道你最终需要索引每个文件中的每个单词,那么为什么不按顺序遍历每个文件中的每个单词呢?在伪代码中它可能看起来像这样。

for each file:
    for each word in file:
        if not word in search:
            search[word] = []
        search[word].append(file)

【讨论】:

    【解决方案2】:

    这是作业,所以我将帮助您解决算法,而不是代码。您似乎已经解决了大部分问题。您唯一需要帮助的是如何实际填充字典。

    1. 打开文件(比如fname),读取其内容
    2. 拆分内容以分隔每个单词
    3. 遍历每个单词。假设我们称之为fword
      1. fword 在字典中吗?
        1. 没有?创建一个空列表作为值的键
        2. 是吗?什么都不做,继续前进
      2. 现在您知道fwordsearch 字典中的一个键,它的值是一个列表。 (假设我们将此列表称为fwlist
      3. 你也知道fword是在文件fname中找到的
      4. 检查fname是否已经在fwlist
        1. 没有?将fname 添加到fwlist
        2. 是吗?不要再添加了。什么都不做。

    现在,您可以进行一些优化,例如使用set 而不是list。这样您就不需要检查fname 是否已经存在于fwlist 中,因为集合会自动丢弃重复项,但这应该足以满足您的需要。

    请记住:在开始编写程序之前,坐下来思考一下您要解决的问题并计划好如何解决问题会很有帮助。当您是新手程序员时,绘制流程图会大有帮助,因为它可以帮助您组织思想并弄清楚您的程序应该如何流动。

    调试也是一项关键技能——如果你不能修复错误,你的代码就毫无用处。 How to debug small programs. | What is a debugger and how can it help me diagnose problems?

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 2020-05-26
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多