在Python中,以下语句不起作用:
f = open("ftmp", "rw") print >> f, "python"
我收到错误:
Traceback (most recent call last): File "", line 1, in IOError: [Errno 9] Bad file descriptor
但是使用以下代码它可以工作:
g = open("ftmp", "r+") print >> g, "python"
看起来我需要修改文件模式.文件打开模式的深层复杂性是什么?
更好的是,让文档为您完成:http://docs.python.org/library/functions.html#open.您在问题中的问题是没有"rw"模式......您可能在编写时需要"r +"(如果文件尚不存在,则为"a +").
作为@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;
那就是:只"rwab+"
允许字符; 必须有一个"rwa"
,最多一个,'+'
并且'b'
是一个noop.