【问题标题】:Searching for substring not returning expected result搜索子字符串未返回预期结果
【发布时间】:2019-07-08 18:04:17
【问题描述】:

我正在编写一个函数,它应该导入一个文本文件,然后迭代每一行以查找包含字符串“text5”的行。我编写了看起来正确的代码(对我来说),但我没有得到预期的结果。当我运行程序时,我得到了很多不匹配的行。但是,如果我将 find 方法的输入更改为“5”,它似乎可以正常工作。

我在这里缺少什么?

with open(filename) as file_object:
    for line in file_object:
        if 'Text5' in line:
            print(line)

【问题讨论】:

  • 你得到的输入和输出是什么
  • 我有一个大文本文件,其中“text5”位于约 200 行内,​​当我运行此代码时,我得到了几乎整个文件作为输出,而不仅仅是匹配的行。
  • 我试图做的是说“迭代文件中的每一行,如果该行包含'text5'然后打印它。”
  • line = file_object.readline()?
  • str.find() 将在未找到文本时返回 -1,而在 Python 中这被视为 True 值,因为它不为零。

标签: python string file-io


【解决方案1】:

从 Python documentation 开始,find() 方法应仅在您需要知道子字符串的位置时使用。要检查子字符串是否在行中,请使用in 运算符。

您应该根据文档使用if 'text5' in line:,它会起作用。我认为正在发生的事情是,即使使用 find() 没有匹配,它也会返回 -1 并且 if 语句将其评估为 True。

如果您正在搜索的子字符串是索引 0,那么find() 唯一一次评估为 False,因为它将返回值 0。任何其他索引值都是 True。

【讨论】:

  • 我根据您的建议更改了代码,但仍然得到相同的结果。我认为您的观点是正确的,但看起来其他原因是这里的根本原因。
  • 那肯定和我的数据文件有关。尝试将此行添加到您的输入文件中,看看它是否会更改您的结果
    Hostname: 1A
  • 所以我创建了第二个数据文件,其中只有原始文件的一个子集并且它有效!会不会是原始数据文件中的某些内容正在停止读取?
  • 我不知道该怎么想。我复制了原始数据文件并将其保存为新的文本文件。之后,输出被纠正。感谢您的帮助,我不知道是什么原因造成的。
猜你喜欢
  • 2021-07-06
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2021-01-22
  • 2020-05-20
  • 2015-01-09
相关资源
最近更新 更多