我在理解“ open()”函数在Python中的工作方式时遇到了麻烦

时间:2019-08-19 20:44:30

标签: python

我目前正在学习如何使用Python编程,而我真的不理解“ open()”函数是如何工作的。我有点知道如何使用它,但是我不太了解它。我主要要问的问题是:使用“ open()”函数时后台发生了什么,将其分配给变量时发生了什么?

进行研究对我几乎没有帮助。我所了解的唯一一件事是,当将“ open()”函数分配给变量时,文件对象将分配给该变量,该对象是一堆方法和变量。但是,对此进行更多研究并没有帮助我。这些方法和变量具体是什么?

我尝试进行测试以了解更多信息,但这给我留下的问题多于答案。例如:

当您在同一文件上执行“ .read()”并分配给2个不同的变量时,只有第一个“ .read()”实际上会将文件中的内容正确分配给第一个变量,而第二个不会分配任何东西。那里发生什么了?以下代码显示了此问题:

makeFile = open("test.txt","w")
makeFile.write("Hello!")
makeFile.close()

makeFile = open("test.txt","r")

read1 = makeFile.read()
read2 = makeFile.read()

print("first variable:",read1)
print("second variable:",read2)

makeFile.close()
input("Press enter to finnish program")

以下是输出:

first variable: Hello!
second variable:
Press enter to finish program

我知道我可以简单地将“ read1”分配给“ read2”,但是为什么不给第二个变量分配任何东西呢?我希望它在两个变量中输出相同的字符串,但只显示一次,然后另一个不显示任何内容。

很抱歉,如果我问了太多问题,但是如果有人解释了使用“ open()”函数时发生的情况以及该示例为何不起作用,我将为我提供很多帮助出席。

2 个答案:

答案 0 :(得分:2)

这里的关键是理解分配r1和r2时的操作。您将调用read方法两次,但是第二次已将文件读取到末尾,没有其他内容可读取了。此方法的所有后续调用都将不返回任何内容-这不是无状态操作。如果您观察到没有分配变量的结果是相同的,也许会有所帮助。

makeFile = open("test.txt","w")
makeFile.write("Hello!")
makeFile.close()

makeFile = open("test.txt","r")

print("first variable:",makeFile.read())
print("second variable:",makeFile.read())

makeFile.close()
input("Press enter to finnish program")

但是,如果您先向.read()添加另一个调用,则两次打印都不会得到任何结果:

makeFile = open("test.txt","w")
makeFile.write("Hello!")
makeFile.close()

makeFile = open("test.txt","r")
makeFile.read()
print("first variable:",makeFile.read())
print("second variable:",makeFile.read())

makeFile.close()
input("Press enter to finnish program")

答案 1 :(得分:2)

最初,“光标”位于文件的开头。 if form_tc.is_valid() and form_ts.is_valid(): form_tc.save() form_ts.save() 将光标移到文件末尾(因为它会读取文件的所有内容)。当您第二次执行makeFile.read()时,光标仍位于文件的末尾,因此没有要读取的内容。

您可以使用makeFile.read()函数来移动光标。