【发布时间】:2013-07-05 01:38:57
【问题描述】:
我正在尝试使用以下代码(在 web2py 中)读取 csv 文件并将其转换为 json 对象:
import csv
import json
originalfilename, file_stream = db.tablename.file.retrieve(info.file)
file_contents = file_stream.read()
csv_reader = csv.DictReader(StringIO(file_contents))
json = json.dumps([x for x in csv_reader])
这会产生以下错误:
'utf8' 编解码器无法解码字节 位置 1 中的 0xa0:无效的起始字节
显然,处理 .csv 文件中的空格存在问题。问题似乎源于 json.dumps() 行。从那时起的追溯:
Traceback (most recent call last):
File ".../web2py/gluon/restricted.py", line 212, in restricted
exec ccode in environment
File ".../controllers/default.py", line 2345, in <module>
File ".../web2py/gluon/globals.py", line 194, in <lambda>
self._caller = lambda f: f()
File ".../web2py/gluon/tools.py", line 3021, in f
return action(*a, **b)
File ".../controllers/default.py", line 697, in generate_vis
request.vars.json = json.dumps(list(csv_reader))
File "/usr/local/lib/python2.7/json/__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/local/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 1: invalid start byte
关于如何解决此问题的任何建议,或将 csv 文件(包含标头;使用 StringIO)放入不会产生类似并发症的 json 对象的其他方法?谢谢。
【问题讨论】:
-
这是 Python 2 还是 3?请务必包含完整回溯。
-
您不需要使用列表推导,而简单的
list()调用就可以做到:json.dumps(list(csv_reader))会更有效。 -
最后但同样重要的是,您需要与我们分享您阅读文件的方式。这是什么网络框架?
-
请澄清错误的确切行。
-
python pandas 提供了非常方便的方式或处理 csv 文件:pandas.pydata.org/pandas-docs/stable/generated/…,如果有帮助的话
标签: python json csv unicode stringio