简体   繁体   中英

Python3 CSV writerows, TypeError: 'str' does not support the buffer interface

I am translating the following Kaggle code into Python3.4:

In the final lines when outputting a CSV file,

predictions_file = open("myfirstforest.csv", "wb")
open_file_object = csv.writer(predictions_file)
open_file_object.writerow(["PassengerId","Survived"])
open_file_object.writerows(zip(ids, output))
predictions_file.close()
print('Done.')

there's a Type Error

TypeError: 'str' does not support the buffer interface

which occurs at the line open_file_object.writerow(["PassengerId","Survived"]) .

I believe this is because Opening a file in binary mode to write csv data to doesn't work in Python 3. However, adding encoding='utf8' in the open() line doesn't work either.

What is the standard way to do this in Python3.4?

Creating a CSV file is different between Python 2 and Python 3 (as a look into the docs for the csv module would have shown):

Instead of

predictions_file = open("myfirstforest.csv", "wb")

you need to use

predictions_file = open("myfirstforest.csv", "w", newline="")

(And you should use a context manager to handle the closing of the file for you, in case an error does occur):

with open("myfirstforest.csv", "w", newline="") as predictions_file:
    # do stuff
# No need to close the file

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM