【发布时间】:2020-09-28 03:55:33
【问题描述】:
file=open("data.txt", "w+")
txt="James\n"
file.writelines(txt)
file.seek(0,0)
s='Bond\n007'
file.write(s)
myList=[]
for line in file:
myList.append(line)
print(myList)
file.close()
我所期望的是文件将写为:
James
Bond
007
这就是我在执行文件后检查文件时实际包含的内容,但问题在于读取部分,即程序的输出:
期待
['James\n','Bond\n', '007']
现实
['James\n']
那么为什么我会得到这种输出呢?
============
编辑部分
============
以下是我观察到的,据我说可以解释这个意外的输出。 我观察到 seek() 函数会自动清除内部缓冲区。这是对这一事实的验证:
file=open("d.txt", "w+")
txt="James\n"
file.writelines(txt)
file.seek(0)
file.write("yo")
while True:
print("This is a test.")
在上面的程序中我没有使用flush(),我在最后执行了一个无限循环,这样执行就不会结束,所以内部缓冲区不会被python清除。 当我在执行仍在进行时打开由该程序创建的文件时会发生什么,我预计该文件将为空,因为所有内容仍将在内部缓冲区中,但事实并非如此。我发现该文件包含文本“James”,而文本“yo”仍在内部缓冲区中,因为程序仍在运行。这证明了我的观点,我尝试了其他几个程序也给出了类似的结果。 One more user 经历过这种情况并在这里询问过,但不幸的是,他的问题被一个声誉很高的用户不负责任地关闭为重复项(这对于声誉较低的用户来说很常见。)
利用上述事实,我们可以将上述输出解释如下:
首先 open 函数创建一个文件句柄,然后在同一目录中创建一个名为 'data.txt' 的文件,然后 writelines 函数将字符串“James\n”存储在内部缓冲区中。然后 seek 函数清除内部缓冲区并在文件中写入“James”[注意:现在文件指针在开头]。现在 for 循环开始并将唯一的行 'James\n' 存储到 mylist 变量中,然后显示为输出。
【问题讨论】:
标签: python