在Python中,以下语句不起作用:
f = open("ftmp", "rw")
print >> f, "python"
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
但是使用以下代码它可以工作:
g = open("ftmp", "r+")
print >> g, "python"
Run Code Online (Sandbox Code Playgroud)
看起来我需要修改文件模式.文件打开模式的深层复杂性是什么?
Jar*_*die 17
更好的是,让文档为您完成:http://docs.python.org/library/functions.html#open.您在问题中的问题是没有"rw"模式......您可能在编写时需要"r +"(如果文件尚不存在,则为"a +").
jfs*_*jfs 12
作为@Jarret Hardie的补充,这里回答了函数fileio_init()中 Python检查文件模式的方式:
s = mode;
while (*s) {
switch (*s++) {
case 'r':
if (rwa) {
bad_mode:
PyErr_SetString(PyExc_ValueError,
"Must have exactly one of read/write/append mode");
goto error;
}
rwa = 1;
self->readable = 1;
break;
case 'w':
if (rwa)
goto bad_mode;
rwa = 1;
self->writable = 1;
flags |= O_CREAT | O_TRUNC;
break;
case 'a':
if (rwa)
goto bad_mode;
rwa = 1;
self->writable = 1;
flags |= O_CREAT;
append = 1;
break;
case 'b':
break;
case '+':
if (plus)
goto bad_mode;
self->readable = self->writable = 1;
plus = 1;
break;
default:
PyErr_Format(PyExc_ValueError,
"invalid mode: %.200s", mode);
goto error;
}
}
if (!rwa)
goto bad_mode;
Run Code Online (Sandbox Code Playgroud)
那就是:只"rwab+"允许字符; 必须有一个"rwa",最多一个,'+'并且'b'是一个noop.
| 归档时间: |
|
| 查看次数: |
24637 次 |
| 最近记录: |