为什么find()方法在这种情况下不起作用?

时间:2018-03-24 19:31:44

标签: python

file2.txt的内容:

zalgoalpha
beta

我的代码:

file = open("file2.txt", "r", encoding = "utf-8")
print(file.read())
print(file.read().find("beta"))

为什么第二个印刷品传达“-1”(“beta”不存在),即使它在文件中,在索引11处?

3 个答案:

答案 0 :(得分:4)

因为您已经在前一行使用了文件对象。文件指针没有任何内容可供阅读

试试这个

with open("file2.txt", "r", encoding = "utf-8") as file:
    content = file.read()
    print(content) 
    print(content.find("beta"))

这种读取文件的方式也可以防止您忘记关闭文件

答案 1 :(得分:3)

当你拨打file.read时,它会将光标移动到文件的末尾,因此当你第二次调用它来查找“beta”时它会返回-1

您可以通过执行

来解决此问题
file.seek(0)

第二次阅读文件之前。或者,将文件的内容保存到变量

contents = file.read()

那么你可以做你以前做过的事情

print(contents)
print(contents.find("beta")

答案 2 :(得分:0)

正如Python documentation所述:

  

要读取文件的内容,请调用f.read(size),它读取一些数据并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回。 size是可选的数字参数。当省略大小或为负时,将读取并返回文件的全部内容;如果文件的大小是机器内存的两倍,那么这就是你的问题。否则,最多读取并返回大小字节。如果已到达文件末尾,f.read()将返回一个空字符串('')。

这基本上意味着您只需阅读文件的内容并到达文件末尾。 你可以这样做:

with open("file2.txt", "r", encoding = "utf-8") as text_file:
    text = file.read()
    print(text)
    print(text.find("beta"))