2011-11-08 13 views
1

次のように私は配列を持っている:混在したデータのエンコード?

row = [u'Arun DC', 4.0, 34.0, 76.0, 223.52941176470588, u'yes', 0.0, '', '', '', '', u'yes', '', u'yes', u'yes', u'yes', u'no', u'\xa37.50 - \xa310 not clear what this is for', u'\xa37.50 - \xa310 not clear what this is for', '', u'\xa37.50 - \xa310 not clear what this is for', u'\xa37.50 - \xa310 not clear what this is for', '', '', '', '', u'no water on sites', '', u'1st years rent free', ''] 

私はCSVファイルにそれを書きたいが、私は次のエラーを取得する:

writer.writerow(row) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 0: ordinal not in range(128) 

だから私は最初にそれをコード試してみましたこれを回避するためにきちんとした方法で

writer.writerow([i.encode('latin-1') for i in row]) 
AttributeError: 'int' object has no attribute 'encode' 

任意の考え:私はフロートアイテムをエンコードすることができないので、それは、私にエラーを与えて?

答えて

8
[x.encode('latin-1') if isinstance(x, unicode) else x 
for x in row] 
1
[i.encode('latin-1') if isinstance(i, unicode) else i for i in row] 
+0

ええ、それは完全に数字を除外します。 – Nate

+0

良い点、リストの理解ではなく3値を使うように更新されました。 –

+0

ここでは、1つの変数名でお互いに異なる2つの回答があります。 – utapyngo

1
[('%s'%a).encode('latin-1') for a in row] 

文字列のリストを返します。あなたはそれを使ってCSVに書き込むことができます。

関連する問題