在 Google Cloud Datalab 中对 Csv 解析器使用不同的编解码器

Using a different codec with Csv parser in Google Cloud Datalab

我正在尝试从 Google Cloud Datalab 中的 google 云存储中读取 csv,但失败并显示以下错误消息:

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 parser 数据实验室提供使用除 ascii 之外的其他编解码器?

我查看了文档,但找不到将编解码器作为参数传递的方法。

Datalab csv 解析器在后台使用 python csv 模块,该模块本身不支持 encodings/codecs。

如果文件不是太大,您可以使用 gcs view 命令将其加载到变量中,然后对其进行编码并将其传递到 csv reader.

该命令只读取整个文件,因此如果您需要限制行数,则必须使用 read_lines() method in the Storage API.