Python文件打开函数模式
我注意到,除了文档中的模式字符外,WindowsXP和8.1中的Python 2.7.5.1至少在读取文件时也接受模式Python文件打开函数模式,python,Python,我注意到,除了文档中的模式字符外,WindowsXP和8.1中的Python 2.7.5.1至少在读取文件时也接受模式U和D。numpy中使用了模式U。模式D的作用是根据以下代码片段删除文件: f = open('text.txt','rD') print(f.next()) f.close() # file text.txt is deleted when closed 有人知道更多关于这些模式的信息吗,特别是它们是否是同样适用于Linux系统的语言的永久特性?这有点误导。 open
U
和D
。numpy中使用了模式U
。模式D
的作用是根据以下代码片段删除文件:
f = open('text.txt','rD')
print(f.next())
f.close() # file text.txt is deleted when closed
有人知道更多关于这些模式的信息吗,特别是它们是否是同样适用于Linux系统的语言的永久特性?这有点误导。
open()
as mode arg接受任何字符,同时传递有效字符,即:“w,r,b,+,a”
因此,您可以编写:open(“fname”,“w+任何您想要的东西”)
。
它将以open(“fname”、“w+”)
的形式打开文件。
和打开(“fname”,“ranythinghouwant”)
。
将以打开(“fname”、“r”)
的方式打开文件
关于“U”旗:
除了标准的fopen()值之外,模式可以是“U”或“rU”。
Python通常使用通用换行符支持构建;供应“U”
以文本文件的形式打开文件,但行可能会被以下任何一种方式终止:
以下内容:Unix终端约定'\n',Macintosh
约定'\r',或Windows约定'\r\n'。所有这些
Python程序将外部表示形式视为“\n”。如果
Python是在没有通用换行符的情况下构建的,支持带有“U”的模式
与普通文本模式相同。请注意,文件对象也是如此打开的
具有一个名为newlines的属性,该属性的值为None(如果否
尚未看到换行符)、'\n'、'\r'、'\r\n'或元组
包含看到的所有换行符类型
正如您在Python文档中看到的那样
编辑:
D:将文件指定为临时文件。当最后一个文件被删除时,它将被删除
指针已关闭
正如您在@tmr232的链接中所看到的那样
c、n、t、S、R、t和D模式选项是Microsoft extensions的
fopen和fd;是开放的,不应在ANSI可移植性较差的地方使用
渴望的
进一步更新:
我建议将此现象作为错误提交,因为以只读方式打开文件,即使用标记“r”,然后允许在关闭文件后/通过添加单个字符(如“D”)来删除文件,我认为,即使是意外,也是一个严重的安全问题。
但是,如果这有一些不可避免的功能,请通知我。该
D
标志似乎是特定于Windows的。Windows似乎向其CRT中的fopen
函数添加了几个标志,如前所述
虽然Python确实会过滤模式字符串以确保不会出现错误,但它确实允许一些特殊标志,如Python源代码中所示。具体而言,似乎过滤掉了N
标志,而允许使用T
和D
标志:
while(*++模式){
如果(*mode==''| |*mode=='N')/*忽略空格和N*/
继续;
s=“+TD”/*每个选项只能出现一次*/
...
我建议坚持使用文档化的选项来保持代码跨平台。
打开('text.txt','rD')
对于Linux上的现有文件,不会给我带来任何错误,尽管文件关闭时不会被删除。我真的很惊讶,如果是真的,这种行为就是。U
标志被记录在案。只是在Windows上复制了这一点。这确实很奇怪。我刚才犯了同样的错误。在fileobject和n中提到了io。@tmr232请给出python和os版本好吗?您指的是什么错误?Windows 8,python 2.7.10 32位。我无法复制,但我想这可能是其他潜在的文件问题?如果它被复制,请参见上面的tmr232响应,请提供U文档的参考资料好吗?@GyörgySolymosi wi请给出python和osversion@user2422503LinuxYeah下的Python2.7.9,在使用open(…,'rD')
时肯定会删除。另请参阅有关Windows函数的文档。“我建议坚持使用文档中的选项”耶!另请参阅