Python seek() 没有将指针移动到正确的位置
Python seek() not shifting pointer to right place
我正在尝试以下 python seek()/tell() 函数。
"input.txt" 是一个包含 6 个字母的文本文件,每行一个:
a
b
c
d
e
f
text = " "
with open("input.txt", "r+") as f:
while text!="":
text = f.readline()
fp = f.tell()
if text == 'b\n':
print("writing at position", fp)
f.seek(fp)
f.write("-")
我原以为字母“c”会被覆盖为“-”,但我却像这样附加了破折号,尽管打印显示“在位置 4 处写入”:
a
b
c
d
e
f-
当我交换 readline() 和 tell() 时输出是正确的(“b”将被“-”替换):
text = " "
with open("input.txt", "r+") as f:
while text!="":
fp = f.tell() # these 2 lines
text = f.readline() # are swopped
if text == 'b\n':
print("writing at position", fp)
f.seek(fp)
f.write("-")
能帮忙解释一下为什么前一种情况不行吗?谢谢!
您需要 flush()
将缓冲区写入磁盘,因为 write
发生在内存中的缓冲区中,而不是磁盘上的实际文件。
在第二种情况下,在 readline()
之前,您正在调用 f.tell()
,这实际上是将缓冲区刷新到磁盘。
text = " "
with open("input.txt", "r+") as f:
while text!="":
text = f.readline()
fp = f.tell()
if text == 'b\n':
print("writing at position", fp)
f.seek(fp)
f.write("-")
f.flush() #------------->
我正在尝试以下 python seek()/tell() 函数。 "input.txt" 是一个包含 6 个字母的文本文件,每行一个:
a
b
c
d
e
f
text = " "
with open("input.txt", "r+") as f:
while text!="":
text = f.readline()
fp = f.tell()
if text == 'b\n':
print("writing at position", fp)
f.seek(fp)
f.write("-")
我原以为字母“c”会被覆盖为“-”,但我却像这样附加了破折号,尽管打印显示“在位置 4 处写入”:
a
b
c
d
e
f-
当我交换 readline() 和 tell() 时输出是正确的(“b”将被“-”替换):
text = " "
with open("input.txt", "r+") as f:
while text!="":
fp = f.tell() # these 2 lines
text = f.readline() # are swopped
if text == 'b\n':
print("writing at position", fp)
f.seek(fp)
f.write("-")
能帮忙解释一下为什么前一种情况不行吗?谢谢!
您需要 flush()
将缓冲区写入磁盘,因为 write
发生在内存中的缓冲区中,而不是磁盘上的实际文件。
在第二种情况下,在 readline()
之前,您正在调用 f.tell()
,这实际上是将缓冲区刷新到磁盘。
text = " "
with open("input.txt", "r+") as f:
while text!="":
text = f.readline()
fp = f.tell()
if text == 'b\n':
print("writing at position", fp)
f.seek(fp)
f.write("-")
f.flush() #------------->