1

csvファイルを別のファイルに変換しようとしています(変換されたデータを使用するプログラムはテキストファイルのように開くだけなので、ファイルの種類は関係ありません)。

これまでのところ、元の csv データを必要なデータ構造に変換して印刷することができましたが、それを別のファイルとして保存する必要があります。

import csv
file = open('newData', 'w')

with open('initialData.csv', 'rb') as f:
reader = csv.reader(f, delimiter=',', quotechar='|')
for row in reader:
    print row[13] + ' 1:' + row[0] + ' 2:' + row[1]
    file.write(f)

file.close()

これを実行するたびに、エラーが発生します。

TypeError: expected a character buffer object

file.write(f)をコメントアウトすると、csvファイルが正常に出力されるため、csvファイルを変換しても問題はありません。

よろしくお願いします!

4

2 に答える 2

8

f元のファイル(オブジェクト)を新しいファイルに書き込もうとしているのはなぜですか?再フォーマットしたデータを書きたくないですか?

import csv

with open('initialData.csv', 'rb') as f_in, open('newData', 'w') as f_out:
    reader = csv.reader(f_in, delimiter=',', quotechar='|')
    for row in reader:
        print row[13] + ' 1:' + row[0] + ' 2:' + row[1]
        f_out.write(row[13] + ' 1:' + row[0] + ' 2:' + row[1])

編集: Jon Clementsが提案したように、出力とインデントの修正にコンテキストマネージャーを使用します。

于 2013-01-02T21:37:19.983 に答える
0

csv ファイル全体のファイル ハンドルを出力しようとしています。印刷しているテキストをファイルに書き出す必要があると思います。その場合は、次のようにします。

with open('initialData.csv', 'rb') as infile, open('newData.txt') as outfile:
    reader = csv.reader(infile, ...)
    for row in reader:
        outfile.write(row[13] + ' 1:' + row[0] + ' 2:' + row[1])
于 2013-01-02T21:37:54.107 に答える