在 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.
我正在尝试从 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.