ファイルに書き込もうとすると、次のエラーが発生します。
Traceback (most recent call last):
File "/private/var/folders/jv/9_sy0bn10mbdft1bk9t14qz40000gn/T/Cleanup At Startup/merge-395780681.888.py", line 151, in <module>
gc_all_d.writerow(row)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 148, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0329' in position 5: ordinal not in range(128)
カウンセラーのデータベースからカウンセラーの名前を集約しているファイルに行を書き込もうとすると、エラーが発生します。
# compile master spreadsheet
with(open('gc_all.txt_3','w')) as gc_all:
gc_all_d = csv.DictWriter(gc_all, fieldnames = fieldnames, extrasaction='ignore', delimiter = '\t')
gc_all_d.writeheader()
for row in aicep_l:
print row['name']
gc_all_d.writerow(row)
for row in nbcc_l:
gc_all_d.writerow(row)
print row['name']
私はここでなじみのない海にいます。この文字 '\u0329' にエンコーディング範囲を広げることができる writerow() メソッドのパラメーターが見つかりません。
このエラーは、nameparser モジュールを使用してすべてのカウンセラーの名前を同じ形式に整理しているという事実と関係があると思います。nameparser からインポートされた HumanName 関数は、カウンセラーの名前を先頭に 'u' を付けて Unicode を示すように書き出す場合があります。これは、総出力が 'Sam the Man' ではなく u'Sam the Man' であることを意味します。
助けてくれてありがとう!
回答に基づく修正後のエラー:
File "/private/var/folders/jv/9_sy0bn10mbdft1bk9t14qz40000gn/T/Cleanup At Startup/merge-395782963.700.py", line 153, in <module>
row['name'] = row['name'].encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 11: ordinal not in range(128)
すべての名前エントリを統一するコード:
# nbcc
with(open('/Users/samuelfinegold/Documents/noodle/gc/nbcc/nbcc_output.txt', 'rU')) as nbcc:
nbcc_d = csv.DictReader(nbcc, delimiter = '\t')
nbcc_l = []
for row in nbcc_d:
# name = HumanName(row['name'])
# row['name'] = name.title + ' ' + name.first + ' ' + name.middle + ' ' + name.last + ' ' + name.suffix
row['phone'] = row['phone'].translate(None, whitespace + punctuation)
nbcc_l.append(row)
修正コード:
# compile master spreadsheet
with(open('gc_all.txt_3','w')) as gc_all:
gc_all_d = csv.DictWriter(gc_all, fieldnames = fieldnames, extrasaction='ignore', delimiter = '\t')
gc_all_d.writeheader()
for row in nbcc_l:
row['name'] = row['name'].encode('utf-8')
gc_all_d.writerow(row)
エラー:
Traceback (most recent call last):
File "/private/var/folders/jv/9_sy0bn10mbdft1bk9t14qz40000gn/T/Cleanup At Startup/merge-395784700.086.py", line 153, in <module>
row['name'] = row['name'].encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 11: ordinal not in range(128)
logout