【问题标题】:What's the difference between 'r+' and 'a+' when open file in python? [duplicate]在python中打开文件时'r +'和'a +'有什么区别? [复制]
【发布时间】:2012-10-26 05:28:30
【问题描述】:

我已经尝试r+a+打开文件和读写,但是'r+'和'a+'都是将str附加到文件末尾。

那么,r+a+ 有什么区别?


添加:

我找到了原因:

我已读取文件对象,但忘记使用 seek(0) 将位置设置为开始

【问题讨论】:

标签: python


【解决方案1】:

如果您在C 中使用过它们,那么它们几乎与C 中的相同。

来自fopen()函数的manpage:-

  • r+ : - 可读写。流位于 这 文件的开头。

  • a+ : - 可读写。如果有,则创建该文件 不是 存在。流位于文件的末尾。子 对文件的 quent 写入将始终在当前结束 文件结尾,与任何中间的 fseek(3) 或类似内容无关。

【讨论】:

    【解决方案2】:

    Python以同样的方式打开文件almostas in C

    • r+ 可读写。流位于文件的开头。

    • a+ 打开以进行读取和追加(在文件末尾写入)。 如果文件不存在则创建该文件。 用于读取的初始文件位置在文件开头,但输出附加到文件末尾(但在某些 Unix 系统中,无论当前搜索位置)。

    【讨论】:

    • 官方文档暗示实际上不能保证“忘记搜索”行为(它适用于“一些”Unix):docs.python.org/2/library/functions.html#open。所以,a+not 的工作方式与 C 中的完全相同。
    • 我建议您编辑答案以反映模式确实 not 以与 C 中完全相同的方式工作的事实,以及输出为不一定要附加到文件的末尾(尽管它是在没有进行搜索的时候)。
    • @EOL 好吧,我必须同意这里,但我仍然不确定暗示 pythonic 函数的fopensome Unix 中没有相同的行为。但是,由于open 函数有其他模式(UrU),我们可以在答案中添加“几乎”。
    • @EOL Python 不为此依赖系统的 C 库吗?我会假设相同的行为。
    • @JanneKarila:问得好。 :) 我确实猜想 CPython 确实依赖于系统的 C 库。不过,我不确定其他 Python 实现(Jython、PyPy……)。
    【解决方案3】:

    r+ 的一个区别是,如果文件不存在,则不会创建它并且打开失败。但在a+ 的情况下,如果文件不存在,则会创建该文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2013-04-08
      • 2016-10-11
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多