Python file modes detail
在Python中,以下语句不起作用:
1 2 | f = open("ftmp","rw") print >> f,"python" |
我得到错误:
1 2 3 | Traceback (most recent call last): File"<stdin>", line 1, in <module> IOError: [Errno 9] Bad file descriptor |
但有了以下代码,它就可以工作了:
1 2 | g = open("ftmp","r+") print >> g,"python" |
看起来我需要修改文件模式。文件打开模式的复杂程度是什么?
更好的是,让文档为您做到这一点:http://docs.python.org/library/functions.html open。你的问题是没有"rw"模式…您可能希望在编写时使用"r+"(如果文件尚不存在,则使用"a+"。
作为@jarret hardie答案的补充,下面是函数fileio_init()中python如何检查文件模式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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; |
也就是说:只允许使用
实际上,这是可以的,但是我在第42行和第45行的代码(对于S60上的python)中找到了套接字上的"rw"模式:
http://www.mobilenin.com/mobilepythonbook/examples/057-btchat.html