【问题标题】:Why the loop to search for a string that is present in a file returns True for first iteration and False for the rest? [duplicate]为什么搜索文件中存在的字符串的循环在第一次迭代时返回 True,而在其余的迭代中返回 False? [复制]
【发布时间】:2016-11-27 19:55:44
【问题描述】:

我有一个名为 text.txt 的文件,其中包含以下数据:

My
Name
Is
Lorem
Ipsum

我的python代码:

with open("text.txt") as f:
    for i in xrange(5):
        print "Is\n" in f

输出:

True
False
False
False
False

为什么只有 i=0 时才输出 True?

如何才能使所有迭代都为 True?我不想将文件的内容存储在任何地方!

【问题讨论】:

  • 您不是在检查行中的成员资格,而是在文件对象(可迭代的行)中检查成员资格。获得该输出的原因是您的行之间有"Is\n",这就是它第一次返回True的原因,但是由于文件对象是像对象一样的迭代器,一旦它在第一次成员资格检查中消耗文件对象,它就会返回False其余的检查。

标签: python string file search


【解决方案1】:

您在第一次测试中使用了您的文件,因此您在文件的末尾进行其他迭代。

您可以将内容读取为字符串,但由于您不想存储文件,我建议将seek 改为文件开头:

with open("test.txt") as f:
    for i in range(5):
        f.seek(0)
        print ("Is\n" in f)

【讨论】:

    【解决方案2】:

    因为它通过文件来检查。第一次迭代后,您位于文件的末尾。如果您想再次读取文件,您可以seek() 到文件的开头。

    with open("text.txt") as f:
        for i in xrange(5):
            f.seek(0)
            print "Is\n" in f
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多