首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么访问模式r+不允许截断并追加新数据而不是覆盖?

为什么访问模式r+不允许截断并追加新数据而不是覆盖?
EN

Stack Overflow用户
提问于 2019-12-17 13:32:02
回答 1查看 86关注 0票数 0

我已经查过了,但我找不到问题的答案。它是关于Python ()函数中的访问模式r+的。我

设置如下:

  1. I有一个test.txt文件,例如,包含11、12、13行的三行。
  2. I有code.py文件,包含以下内容:

代码语言:javascript
复制
script, filename = argv

print("Opening the file...")
target=open(filename, 'r+')

print("currently in the file: ")
print(target.read())

print("Truncating the file")
target.truncate()

print("input three lines.")
line1 = input("line 1: ")
line2 = input("line 2: ")
line3 = input("line 3: ")

target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.write(line3)
target.write("\n")

print("Now we close the file. Bye.")
target.close()

  1. I从命令行运行: python code.py test.txt

执行read()函数,我看到11,12,13输出到命令窗口。

我猜想truncate()也是运行的。

然后我输入三条新行,比如66,67,68。

当我打开test.txt文件时,我在一列11、12、13、66、67、68中看到。

我期望truncate()删除test.txt文件中的所有数据,然后r+在其中写入66,67,68,而不是附加这些行。

有人能解释一下为什么会发生这种事吗?

我不理解逻辑,对访问模式的描述也没有帮助(嗯,我知道w/w+截断(=删除所有数据)在打开的文件上)。

如果我将target.truncate()替换为target.truncate(0),那么11,12,13将被删除,我在第66、67、68列中看到其中66缩进了10个空格。这里发生了什么??

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2019-12-17 13:44:16

因为您没有指定任何大小,所以truncate减少到当前位置。在r模式下,它是文件的结尾。试试truncate(0)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59375373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档