将输出重定向到文件时出现 UnicodeEncodeError - python 2.7
UnicodeEncodeError while redirecting output to file - python 2.7
我必须将 googlemaps API 函数的输出重定向到一个文件。我的 pandas 数据框中有一些 objects
,我通过 google API.
获取它们的地址
import googlemaps
from __future__ import print_function
f=open('output.csv', 'w')
for idx, row in df.iterrows():
gmaps = googlemaps.Client(key="my_key")
reverse_result = gmaps.reverse_geocode((row['lat'], row['lon']), result_type='administrative_area_level_3')
for result in reverse_result:
print (row['object'],result["formatted_address"], file=f)
当我这样做时,我得到了错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 15: ordinal not in range(128)
如果我只是将它打印到屏幕上,它会完美地工作并且显示格式正确的地址;问题出在将其写入外部文件的过程中。我想我明白错误消息告诉我的是什么 - 输出中有一些字符没有用 utf8 编码 - 但我不知道如何解决它并将我的输出写入我的 csv。
问题已解决。原来问题不是 API 的结果,而是 df 的 row['object']
的结果。我写了一个简单的函数
def force_to_unicode(text):
return text if isinstance(text, unicode) else text.decode('utf8')
然后我刚刚编辑了第二个 for 循环:
for result in reverse_result:
a=force_to_unicode(row['object'])
b=result['formatted_address']
print(a,',',b, file=f) #write result to csv file
我必须将 googlemaps API 函数的输出重定向到一个文件。我的 pandas 数据框中有一些 objects
,我通过 google API.
import googlemaps
from __future__ import print_function
f=open('output.csv', 'w')
for idx, row in df.iterrows():
gmaps = googlemaps.Client(key="my_key")
reverse_result = gmaps.reverse_geocode((row['lat'], row['lon']), result_type='administrative_area_level_3')
for result in reverse_result:
print (row['object'],result["formatted_address"], file=f)
当我这样做时,我得到了错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 15: ordinal not in range(128)
如果我只是将它打印到屏幕上,它会完美地工作并且显示格式正确的地址;问题出在将其写入外部文件的过程中。我想我明白错误消息告诉我的是什么 - 输出中有一些字符没有用 utf8 编码 - 但我不知道如何解决它并将我的输出写入我的 csv。
问题已解决。原来问题不是 API 的结果,而是 df 的 row['object']
的结果。我写了一个简单的函数
def force_to_unicode(text):
return text if isinstance(text, unicode) else text.decode('utf8')
然后我刚刚编辑了第二个 for 循环:
for result in reverse_result:
a=force_to_unicode(row['object'])
b=result['formatted_address']
print(a,',',b, file=f) #write result to csv file