Python file modes detail

后端 未结 3 1024
轻奢々
轻奢々 2021-02-03 10:28

In Python, the following statements do not work:

f = open(\"ftmp\", \"rw\")
print >> f, \"python\"

I get the error:

Trace         


        
相关标签:
3条回答
  • 2021-02-03 10:58

    In fact, this is okay, but I found an "rw" mode on the socket in following code (for Python on S60) at lines 42 and 45:

    http://www.mobilenin.com/mobilepythonbook/examples/057-btchat.html

    0 讨论(0)
  • 2021-02-03 11:05

    As an addition to @Jarret Hardie's answer here's how Python check file mode in the function fileio_init():

    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;
    

    That is: only "rwab+" characters are allowed; there must be exactly one of "rwa", at most one '+' and 'b' is a noop.

    0 讨论(0)
  • 2021-02-03 11:13

    Better yet, let the documentation do it for you: http://docs.python.org/library/functions.html#open. Your issue in the question is that there is no "rw" mode... you probably want 'r+' as you wrote (or 'a+' if the file does not yet exist).

    0 讨论(0)
提交回复
热议问题