python: TypeError: can't write str to text stream

后端 未结 5 1843
灰色年华
灰色年华 2020-12-15 05:10

I must be doing something obviously wrong here. But what is it, and how do I fix?

Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)         


        
相关标签:
5条回答
  • 2020-12-15 05:13

    Try:

    >>> f1.write(u'bingo')      # u specifies unicode
    

    Reference

    0 讨论(0)
  • 2020-12-15 05:19

    Have you tried writing a Unicode string, instead of just a str? I.e.,

    fq.write(u"bingo")
    

    I'm on Mac OS X, but when I tried to write a str, I got the error

    TypeError: must be unicode, not str

    Writing a Unicode string worked, though.

    0 讨论(0)
  • 2020-12-15 05:28

    The io module differs from the old open in that it will make a big difference between binary and text files. If you open a file in text mode, reading will return Unicode text objects (called unicode in Python 2 and str in Python 3) and writing requires that you give it unicode objects as well.

    If you open in binary mode, you will get 8-bit sequential data back, and that's what you need to write. In Python 2 you use str for this, in Python 3 bytes.

    You are using Python 2, and trying to write str to a file opened in text mode. That won't work. Use Unicode.

    0 讨论(0)
  • 2020-12-15 05:31
    f = open("test.txt", "w")
    f.write('bingo')
    f.close()
    

    equivalently,

    with open("test.txt", "w") as f:
        f.write('bingo')
    

    and the termination of the block closes the file for you.

    0 讨论(0)
  • 2020-12-15 05:33

    The io module is a fairly new python module (introduced in Python 2.6) that makes working with unicode files easier. Its documentation is at: http://docs.python.org/library/io.html

    If you just want to be writing bytes (Python 2's "str" type) as opposed to text (Python 2's "unicode" type), then I would recommend you either skip the io module, and just use the builtin "open" function, which gives a file object that deals with bytes:

    >>> f1 = open('test.txt','w')
    

    Or, use 'b' in the mode string to open the file in binary mode:

    >>> f1 = io.open('test.txt','wb')
    

    Read the docs for the io module for more details: http://docs.python.org/library/io.html

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