Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件打开函数模式_Python - Fatal编程技术网

Python文件打开函数模式

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

我注意到,除了文档中的模式字符外,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()
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函数的文档。“我建议坚持使用文档中的选项”耶!另请参阅