В настоящее время я читаю из REST API в Python 2.7, а затем обрабатываю ответ JSON и сохраняю его namedtupled .
Результаты записываются в CSV-файл.В настоящее время я получаю эту ошибку:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128)
Пример ответа API:
[u'private:bowlmorlanes', u'4983691', 30804108, u'20180604', u'Bowlmor AMF', 10753, 639.0, u'https://www.linkedin.com/company/4983691', u'Entertainment', u'20180604', u'20180604T155553Z', None, u'https://www.bowlmor.com', None, None]
Каждый из этих элементов в списке обрабатывается как именованный:
Product = collections.namedtuple('Product', [
'ticker_symbol', 'entity', 'unique_id', 'as_of_date', 'company_name',
'followers', 'items', 'linkedin', 'industry', 'date_added',
'date_updated', 'description', 'website', 'sector', 'ticker_industry'
])
Обработка ответа:
response_rows = response_items.get('rows')
# Request JSON string contains summary of request.
results = []
for response_row in response_rows:
logging.info(response_row)
results.append(Product(*response_row))
return results
Сохранение результатов
def SaveDataSet(results: Sequence[Product], filename: str):
"""Writes results stored in Sequence into a file in CNS.
Args:
results: Results with app information.
filename: Destination file.
Raises:
ValueError: Result list is empty.
FileError: Unable to write filename.
"""
if not results:
raise ValueError('Result list is empty')
logging.info('Saving results here: %s', filename)
with open(filename, 'w+') as csvfile:
filewriter = csv.writer(csvfile)
filewriter.writerows(results)
logging.info('URLs processed: %d.', len(results))
SaveDataSet(results, output_file)
Вопрос: Каков наилучший способ преобразования каждого параметра в именованном корте с использованием этой функции для предотвращения ошибки:
def _ToString(value):
"""Returns a string type based on value variable type.
Since we handle multiple languages we need to return a string type to write
in file human readable character.
Args:
value: (None, str or unicode)
Returns:
A str or None if no input.
"""
if not value:
logging.warning('Empty value')
return None
if isinstance(value, unicode):
return value.encode('utf-8')
else:
return str(value)