【问题标题】:File mode for creating+reading+appending+binary创建+读取+追加+二进制的文件模式
【发布时间】:2010-05-03 12:13:59
【问题描述】:

我需要打开一个文件进行读写。如果未找到该文件,则应创建该文件。它也应该被视为 Windows 的二进制文件。你能告诉我我需要使用的文件模式序列吗?

我尝试了“r+ab”,但如果找不到文件,则不会创建文件。

谢谢

【问题讨论】:

    标签: python file-io


    【解决方案1】:

    模式是ab+ r 是隐含的,'a' append 和 ('w'rite '+' 'r'ead) 是多余的。由于 CPython(即常规 python)file 基于 C stdio FILE 类型,以下是 fopen(3) 手册页中的相关行:

    • w+ 打开以进行读写。 如果没有,则创建该文件 存在,否则被截断。 流位于 文件的开头。

    • a+ 打开以进行读取和追加(在文件末尾写入)。 如果没有,则创建该文件 存在。初始文件位置 因为阅读是在开头 文件,但输出总是 附加到文件末尾。

    加上“b”以使 DOS 满意。大概你想做这样的事情:

    >>> f = open('junk', 'ab+')
    >>> f
    <open file 'junk', mode 'ab+' at 0xb77e6288>
    >>> f.write('hello\n')
    >>> f.seek(0, os.SEEK_SET)
    >>> f.readline()
    'hello\n'
    >>> f.write('there\n')
    >>> f.seek(0, os.SEEK_SET)
    >>> f.readline()
    'hello\n'
    >>> f.readline()
    'there\n'
    

    【讨论】:

    • 有效。还要感谢您在示例中指出 os.SEEK_SET 。我想我之前尝试过用 a+ 打开文件,但无法从中读取任何内容。我没想到流被放在文件的末尾...
    • 请记住,您必须 始终在读取和写入或写入和读取之间进行查找。忘记这样做通常会在大多数系统上工作,但不会(例如)在 Windows 上。
    【解决方案2】:
    open("filename", "a+b")
    

    应该可以。它以追加/更新模式打开一个二进制文件。

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 2016-09-30
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多