Python文件打开功能模式

Nam*_*ose 19 python

我注意到,除了记录模式字符,巨蟒2.7.5.1在Windows XP和8.1也接受模式U,并D至少在读取文件时.模式U用于numpy的genfromtxt.模式D具有删除文件的效果,如下面的代码片段:

 f = open('text.txt','rD')
 print(f.next())
 f.close()  # file text.txt is deleted when closed
Run Code Online (Sandbox Code Playgroud)

有没有人更了解这些模式,特别是它们是否也是Linux系统上适用的语言的永久特性?

tmr*_*232 8

D标志似乎是Windows特定的.窗户似乎几个标志添加到fopen其CRT功能,描述在这里.

虽然Python确实过滤了模式字符串以确保没有错误,但它确实允许一些特殊的标志,这可以在Python源代码中看到.具体来说,似乎N过滤掉了标志,而允许使用TD标志:

while (*++mode) {
    if (*mode == ' ' || *mode == 'N') /* ignore spaces and N */
        continue;
    s = "+TD"; /* each of this can appear only once */
    ...
Run Code Online (Sandbox Code Playgroud)

我建议坚持使用记录的选项来保持代码跨平台.

  • 另请参阅Windows [CreateFile](https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx)函数中的文档. (3认同)
  • "我会建议坚持记录的选项"耶!另请参见[module tempfile](https://docs.python.org/2/library/tempfile.html?highlight=tempfile#tempfile.TemporaryFile) (2认同)

Gee*_*ode 5

这有点误导. open()当模式arg接受任何字符时,你传递一个有效的字符,即:"w,r,b,+,a".

因此你可以写:open("fname", "w+ANYTHINGYOUWANT").它将打开文件为open("fname", "w+").并且open("fname", "rANYTHINGYOUWANT").将打开文件为open("fname", "w+").

关于"U"旗:

除了标准的fopen()值模式可以是'U'或'rU'.Python通常使用通用换行符支持构建; 提供'U'将文件作为文本文件打开,但行可以通过以下任何一种方式终止:Unix行尾约定'\n',Macintosh约定'\ r'或Windows约定'\ r\N".所有这些外部表示都被Python程序视为'\n'.如果在没有通用换行符的情况下构建Python,则使用"U"的模式与普通文本模式相同.请注意,如此打开的文件对象也有一个名为newlines的属性,其值为None(如果尚未看到换行符),'\n','\ r','\ r \n'或包含所有元组的元组看到的换行类型.

正如您可以阅读Python文档https://docs.python.org/2/library/functions.html#open

编辑:

D:将文件指定为临时文件.当最后一个文件指针关闭时,它将被删除.

你可以阅读@ tmr232的链接.

c,n,t,S,R,T和D模式选项是fopen和_fdopen的Microsoft扩展,不应在需要ANSI可移植性的地方使用

进一步更新:

我建议把这个现象作为一个bug提交,因为打开一个文件是只读的,即标记为"r",然后允许删除之后/通过关闭它添加单个字符如"D",甚至意外是一个严重的安全问题,我认为.

但是,如果这有一些不可避免的功能,请通知我.