Использование другого кодека с парсером Csv в Google Cloud Datalab

Я пытаюсь прочитать csv из облачного хранилища Google в Google Cloud Datalab, но он падает со следующим сообщением об ошибке:

UnicodeDecodeErrorTraceback (most recent call last)
<ipython-input-19-ba47ebe88c7a> in <module>()
    17 fn = generate_input_fn(filename)
    18 k,v = fn()
---> 19 csv.browse(max_lines = 1000)
    20 
    21 

/usr/local/lib/python2.7/dist-packages/datalab/data/_csv.pyc in browse(self, max_lines, headers)
    89     """
    90     if self.path.startswith('gs://'):
---> 91       lines = Csv._read_gcs_lines(self.path, max_lines)
    92     else:
    93       lines = Csv._read_local_lines(self.path, max_lines)

/usr/local/lib/python2.7/dist-packages/datalab/data/_csv.pyc in _read_gcs_lines(path, max_lines)
    56   @staticmethod
    57   def _read_gcs_lines(path, max_lines=None):
---> 58     return datalab.storage.Item.from_url(path).read_lines(max_lines)
    59 
    60   @staticmethod

/usr/local/lib/python2.7/dist-packages/datalab/storage/_item.pyc in read_lines(self, max_lines)
    200       content = self.read_from(byte_count=bytes_to_read)
    201 
--> 202       lines = content.split('\n')
    203       if len(lines) > max_lines or bytes_to_read >= max_to_read:
    204         break

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 35587: ordinal not in range(128)

Кажется, это связано с тем, что файл не закодирован в ascii, а синтаксический анализатор csv предполагает ascii.

Можно ли получить анализатор csv лабораторию данных? обеспечивает использование другого кодека, отличного от ascii?

Я просмотрел документы, но не нашел способа передать кодек в качестве параметра.


person Stewart_R    schedule 06.05.2017    source источник


Ответы (1)


Парсер Datalab csv использует модуль python csv под капотом, и сам этот модуль не поддерживает кодировки/кодеки.

Если файл не слишком большой, вы можете использовать gcs view, чтобы загрузить его в переменную, затем закодировать и передать программе чтения csv.

Эта команда просто читает весь файл, поэтому, если вам нужно ограничить количество строк, вам придется использовать read_lines() в Storage API.

person Chris Meyers    schedule 08.05.2017