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


108

在这里,我有好几次见过人们使用rtwt模式来读写文件。

例如:

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

我没有看到有关模式的文档,但是由于open()不会引发错误-看起来非常合法。

它的作用是什么,使用wtvs wrtvs 之间有什么区别r

Answers:


193

t指文本模式。rrtw和与之间没有区别,wt因为文本模式是默认模式。

记录在这里

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')。


4
知道,它记录在python3文档中。因此,wtvs wrtvs r-just 之间基本上没有区别explicit is better than implicit
alecxe 2014年

@alecxe对,因为默认为文本模式,所以r和之间没有区别rt...
devnull 2014年

9
请注意,w并不总是等于wt。一种这样的情况是gzip.open默认为二进制模式,而不是文本模式。相关问题:stackoverflow.com/questions/42013083/…–
卡尔·埃克洛特

9

t显示文本模式,这意味着\n字符将写入文件时,读取时被翻译成主机OS行结束,然后再返回。由于文本模式是默认设置,因此标记基本上只是噪音。

除此之外U,这些模式的标志直接来自标准C库的fopen()功能,即在第六段记录的事实python2文档open()

据我所知,t它不是并且从未成为C标准的一部分,因此尽管C库的许多实现仍然接受了C标准,但并不能保证它们全部都能实现,因此也不能保证它可以在C的每个构建中使用。蟒蛇。这就解释了为什么python2文档没有列出它,以及为什么它仍然正常工作。该python3文档使它官员。


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/…等。谢谢您提供的信息,很高兴知道。
alecxe 2014年

devnull提供的链接中列出了“ t”文本选项。令我惊讶的是C ++链接也没有提到't'选项,因为我敢肯定我在几年前编写的C fopen代码中使用了'rt'和'wt'选项。
jussij 2014年

是的,这就是我问的原因-对我而言,这就像一个未记录的功能。希望该线程将来能对某人有所帮助。再次感谢。
alecxe 2014年

3

t 表示 text mode

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

在Linux上,文本模式和二进制模式之间没有区别,但是在Windows中,它们会转换\n\r\nwhen文本模式。

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


5
在Python 3中,文本模式和二进制文件模式之间存在其他差异(在所有平台上)。在文本模式下,read返回Unicode字符串。在二进制模式下,read返回一个bytes实例。如果您想编写具有向前兼容性的Python 2代码,则可以使用io.open而不是标准open来获取Python 3行为(带有unicodevs str实例)。
Blckknght
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.