3
我正在翻譯以下Kaggle代碼到Python3.4:Python3 CSV writerows,類型錯誤: 'STR' 不支持緩衝器接口
在最後的線輸出的CSV文件時,
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.')
有一個類型錯誤
TypeError: 'str' does not support the buffer interface
發生在該行open_file_object.writerow(["PassengerId","Survived"])
。
我相信這是因爲以二進制模式打開文件來編寫csv數據在Python 3中不起作用。但是,在open()
行中添加encoding='utf8'
也不起作用。
在Python3.4中這樣做的標準方式是什麼?
「作爲csv模塊的文檔的一個看看會顯示」我意識到這一點(並在原始問題中用英文提到它)。我不明白這個錯誤是由'newline ='「''引起的,這就是我爲什麼要澄清的原因。我爲你造成這樣的痛苦表示歉意。 – ShanZhengYang
@ShanZhengYang爲清楚起見:''wb''以二進制模式打開文件,因此'.write()'需要二進制數據,例如'bytes'對象,而不是'str',這是Python 3中的Unicode。''w ''以文本模式打開文件:'.write()'期望'str'。 Python 3.5會產生更多可理解的錯誤信息:'TypeError:需要類似字節的對象,而不是'str''。 'newline =「」'與問題無關,但推薦用於'csv'文件(即使在Unix上,'csv'模塊也使用'b'\ r \ n'';'newline ='''允許不用寫新行通常的通用換行符模式轉換(''\ n'' - >'os.linesep'))。 – jfs