我在Python中调用google adwords api,然后我将该数据记录到CSV文件中,我正在处理UnicodeDecode / EncodeError,并且我已经尝试了所有内容来理解它现在没有用。
with open('adgroups.csv', 'w', newline='') as csvfile:
campaign_name = seed_keyword.title().encode('utf-8','ignore').decode()
kw_writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
kw_writer.writerow(
["CAMPAIGN", "ADGROUP", "MAX BID", "KEYWORD", "MATCH TYPE", "AVERAGE CPC", "SEARCH VOLUME", "COMPETITION"])
for ad_group in ad_group_list:
ad_group_name = ad_group['keyword'].title().encode('utf-8','ignore').decode()
try:
for keyword_data in ad_group['keyword_data_list']:
kw_writer.writerow(
[campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "BROAD",
str(keyword_data['cpc']).encode('utf-8','ignore').decode(),
str(keyword_data['search_volume']).encode('utf-8','ignore').decode(), str(keyword_data['competition']).encode('utf-8','ignore').decode()])
kw_writer.writerow(
[campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "PHRASE",
"",
"", ""])
kw_writer.writerow(
[campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "EXACT",
"",
"", ""])
except UnicodeError as e:
print(e)
print(str(ad_group))
raise
File "/var/www/html/ARB-Automation/MultiProcessController.py", line 158, in perform_automation
CSVCampaignSetup.get_in_kw_and_make_adgroups(seed_keyword, ad_group_bid_mapping, cluster_bid_dict)
File "/var/www/html/ARB-Automation/CSVCampaignSetup.py", line 163, in get_in_kw_and_make_adgroups
make_single_adgroup_csv(best_ad_group_data)
File "/var/www/html/ARB-Automation/CSVCampaignSetup.py", line 222, in make_single_adgroup_csv
str(keyword_data['search_volume']).encode('utf-8','ignore').decode(), str(keyword_data['competition']).encode('utf-8','ignore').decode()])
UnicodeEncodeError:' ascii'编解码器不能对字符' \ xf1'进行编码。位置61:序数不在范围内(128)
奇怪的事情 - 第222行的堆栈跟踪注释错误,这是"编码"错误,据我所知,它试图创建unicode字符串的字节表示。 第222行需要编码的数据是一个数字 - int或float!如何找不到127位以下的表示 - 因此' ascii'编码问题?
另外,我有一个解决方案 - 而不是编码(' utf-8''忽略')如果我编码(' ascii', '忽略'),它不应该解决问题吗?问题仍然是这是否是理想的解决方案?
我甚至打印了原始数据,我在解释器中逐步运行了这段代码,然后我没有收到任何错误。 请帮帮我。
答案 0 :(得分:-1)
请将python源文件名(路径)非英语字符(在本例中为ñ)更改为英语字符[a-z0-9]和有效的OS文件名字符。 我使用pyscripter,我有这个问题。