Python文件打开功能模式

时间:2015-07-19 14:36:01

标签: python

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

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

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

2 个答案:

答案 0 :(得分:8)

D标志似乎是Windows特定的。 Windows似乎在其CRT中为fopen函数添加了几个标志,如here所述。

虽然Python确实过滤了模式字符串以确保没有错误,但它确实允许一些特殊的标志,如Python源here中所示。具体来说,似乎过滤了N标志,而允许TD标志:

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

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

答案 1 :(得分: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模式选项为 Microsoft扩展程序   fopen和_fdopen,不应该在ANSI可移植性的地方使用   期望的

进一步更新:

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

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