Windows 8でPython 3.3を使用すると、CSVファイルに書き込むときにエラーTypeError: 'str' does not support the buffer interface
および"wb"
フラグが使用されました。ただし、"w"
フラグが使用されました。エラーは発生しませんが、すべての行が空白行で区切られています!
コード
test_file_object = csv.reader( open("./files/test.csv", 'r') )
next(test_file_object )
with open("./files/forest.csv", 'wb') as myfile:
open_file_object = csv.writer( open("./files/forest.csv", 'wb') )
i = 0
for row in test_file_object:
row.insert(0, output[i].astype(np.uint8))
open_file_object.writerow(row)
i += 1
エラー
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-121-8cbb94f602a8> in <module>()
8 for row in test_file_object:
9 row.insert(0, output[i].astype(np.uint8))
---> 10 open_file_object.writerow(row)
11 i += 1
TypeError: 'str' does not support the buffer interface
読んでいるとき、"rb"
フラグを付けると、エラーが発生しますiterator should return strings, not bytes
最初の行(ヘッダー)を無視しようとした場合。
コード
csv_file_object = csv.reader(open('files/train.csv', 'rb'))
header = next(csv_file_object)
train_data = []
for row in csv_file_object:
train_data.append(row)
train_data = np.array(train_data)
エラー
Error Traceback (most recent call last)
<ipython-input-10-8b13d1956432> in <module>()
1 csv_file_object = csv.reader(open('files/train.csv', 'rb'))
----> 2 header = next(csv_file_object)
3 train_data = []
4 for row in csv_file_object:
5 train_data.append(row)
Error: iterator should return strings, not bytes (did you open the file in text mode?)
_'wb'
_モードはPython 2の場合は問題ありませんでしたが、Python 3.の場合は間違っています。= Python = 3、csvリーダーにはバイトではなく文字列が必要です。この方法では、テキストモードで開く必要があります。ただし、コンテンツを読み取るときに_\n
_を解釈しないでください。このように、_newline=''
_ファイルを開くとき:
_with open("./files/forest.csv", newline='') as input_file \
open('something_else.csv', 'w', newline='') as output_file:
writer = csv.writer(output_file)
...
_
ファイルが純粋なASCIIでない場合は、_encoding=...
_パラメータの追加も検討する必要があります。
こんにちはこれはあなたを助けるかもしれません。
最初の問題、
変化する
with open("./files/forest.csv", 'wb') as myfile:
open_file_object = csv.writer( open("./files/forest.csv", 'wb') )
に
with open("./files/forest.csv", 'w+') as myfile:
open_file_object = csv.writer( open("./files/forest.csv", 'w+') )
2番目の問題:
R +への変更を除いて、まったく同じです。
それが機能しない場合は、常にこれを使用して、作成後にすべての空白行を取り除くことができます。
for row in csv:
if row or any(row) or any(field.strip() for field in row):
myfile.writerow(row)
また、少しレッスン。 「rb」はバイトの読み取りを意味し、基本的には整数のみを読み取るものと考えてください。私はあなたのcsvの内容が何であるかはわかりません。ただし、そのcsvには文字列が必要です。
これは、将来の参照に役立ちます。
引数モードは、次のシーケンスのいずれかで始まる文字列を指します(追加の文字がこれらのシーケンスに続く場合があります)。
``r'' Open text file for reading. The stream is positioned at the
beginning of the file.
``r+'' Open for reading and writing. The stream is positioned at the
beginning of the file.
``w'' Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
``w+'' Open for reading and writing. The file is created if it does not
exist, otherwise it is truncated. The stream is positioned at
the beginning of the file.
``a'' Open for writing. The file is created if it does not exist. The
stream is positioned at the end of the file. Subsequent writes
to the file will always end up at the then current end of file,
irrespective of any intervening fseek(3) or similar.
``a+'' Open for reading and writing. The file is created if it does not
exist. The stream is positioned at the end of the file. Subse-
quent writes to the file will always end up at the then current
end of file, irrespective of any intervening fseek(3) or similar.