以“rt”和“wt”模式打开文件

Posted

技术标签:

【中文标题】以“rt”和“wt”模式打开文件【英文标题】:Open files in 'rt' and 'wt' modes 【发布时间】: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 有什么区别?

【问题讨论】:

【参考方案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,其中二进制模式是默认模式,而不是文本模式。相关问题:***.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,例如***.com/questions/10971033/… 或 ***.com/questions/17127853/… 等。感谢您提供的信息,很高兴知道。 在 devnull 提供 't' 文本选项的链接中列出。令我惊讶的是 C++ 链接也没有提到“t”选项,因为我很确定我在几年前编写的 C fopen 代码中使用了“rt”和“wt”选项。 是的,这就是我问的原因 - 这对我来说就像一个未记录的功能。希望该线程将来可以帮助某人。再次感谢。

以上是关于以“rt”和“wt”模式打开文件的主要内容,如果未能解决你的问题,请参考以下文章

C中操作文件的几种模式

Python 读写文件中w与wt, r与rt的区别

python 读写文件中 w与wt ; r与rt 的区别

python 文件的打开与读写

mongodb wt文件怎么打开

python对文件的读写