【问题标题】:Open files in 'rt' and 'wt' modes以“rt”和“wt”模式打开文件
【发布时间】:2014-05-27 21:07:04
【问题描述】:

这里有好几次我看到人们使用rtwt 模式来读写文件。

例如:

with open('input.txt', 'rt') as input_file:
     with open('output.txt', 'wt') as output_file: 
         ...

我没有看到 documented 模式,但由于 open() 不会引发错误 - 看起来使用起来非常合法。

使用wtwrtr 有什么区别?

【问题讨论】:

    标签: python file file-io read-write


    【解决方案1】:

    t 指的是文本模式。 rrtwwt 之间没有区别,因为文本模式是默认设置。

    记录在案的here

    Character   Meaning
    'r'     open for reading (default)
    'w'     open for writing, truncating the file first
    'x'     open for exclusive creation, failing if the file already exists
    'a'     open for writing, appending to the end of the file if it exists
    'b'     binary mode
    't'     text mode (default)
    '+'     open a disk file for updating (reading and writing)
    'U'     universal newlines mode (deprecated)
    

    默认模式为'r'(打开阅读文字,'rt'的同义词)。

    【讨论】:

    • 知道了,它记录在 python3 文档中。所以,wtwrtr 之间基本上没有区别 - 只是 explicit is better than implicit?
    • @alecxe 对,因为默认是文本模式,所以rrt没有区别...
    • 请注意,w 并不总是等于 wt。一种这样的情况是gzip.open,其中二进制模式是默认模式,而不是文本模式。相关问题:stackoverflow.com/questions/42013083/…
    【解决方案2】:

    t 表示text mode

    https://docs.python.org/release/3.1.5/library/functions.html#open

    在linux上,文本模式和二进制模式没有区别, 但是,在 Windows 中,它们会在文本模式下将 \n 转换为 \r\n

    http://www.cygwin.com/cygwin-ug-net/using-textbinary.html

    【讨论】:

    • 在 Python 3 中,文本和二进制文件模式(在所有平台上)之间存在额外的差异。在文本模式下,read 返回 Unicode 字符串。在二进制模式下,read 返回一个bytes 实例。如果您想编写具有向前兼容性的 Python 2 代码,可以使用 io.open 而不是标准的 open 来获得 Python 3 行为(使用 unicodestr 实例)。
    【解决方案3】:

    t 表示文本模式,这意味着\n 字符将在写入文件时转换为主机操作系统的行尾,并在读取时再次返回。该标志基本上只是噪音,因为文本模式是默认设置。

    除了U,这些模式标志直接来自标准C 库的fopen() 函数,这一事实记录在python2 documentation 的第六段open()

    据我所知,t 不是也从来没有成为 C 标准的一部分,因此尽管 C 库的许多实现无论如何都接受它,但不能保证它们都会接受,因此也不能保证它将适用于每个构建的python。这就解释了为什么 python2 文档没有列出它,以及为什么它通常仍然有效。 python3 docs 正式发布。

    【讨论】:

      【解决方案4】:

      “r”用于读取,“w”用于写入,“a”用于附加。

      “t”表示文本模式与二进制模式相对。

      这里有好几次我看到人们使用 rt 和 wt 模式来读取和写入文件。

      编辑:你确定你看到的是 rt 而不是 rb?

      这些函数通常包装 fopen 函数,此处描述:

      http://www.cplusplus.com/reference/cstdio/fopen/

      如您所见,它提到了使用 b 以二进制模式打开文件。

      你提供的文档链接也提到了这个b模式:

      即使在不区别对待二进制文件和文本文件的系统上,附加“b”也很有用,它用作文档。

      【讨论】:

      • 是的,很明显是rt,例如stackoverflow.com/questions/10971033/…stackoverflow.com/questions/17127853/… 等。感谢您提供的信息,很高兴知道。
      • 在 devnull 提供 't' 文本选项的链接中列出。令我惊讶的是 C++ 链接也没有提到“t”选项,因为我很确定我在几年前编写的 C fopen 代码中使用了“rt”和“wt”选项。
      • 是的,这就是我问的原因 - 这对我来说就像一个未记录的功能。希望该线程将来可以帮助某人。再次感谢。
      猜你喜欢
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多