我注意到,除了记录模式字符,巨蟒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系统上适用的语言的永久特性?
该D标志似乎是Windows特定的.窗户似乎几个标志添加到fopen其CRT功能,描述在这里.
虽然Python确实过滤了模式字符串以确保没有错误,但它确实允许一些特殊的标志,这可以在Python源代码中看到.具体来说,似乎N过滤掉了标志,而允许使用T和D标志:
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)
我建议坚持使用记录的选项来保持代码跨平台.
这有点误导.
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",甚至意外是一个严重的安全问题,我认为.
但是,如果这有一些不可避免的功能,请通知我.
| 归档时间: |
|
| 查看次数: |
3255 次 |
| 最近记录: |