【问题标题】:Generating a JSON file from Excel to be read it in Python从 Excel 生成 JSON 文件以在 Python 中读取
【发布时间】:2020-02-12 05:54:39
【问题描述】:

我有一个很大的 Excel 文件,其中包含多个表格。
我能够使用 VBA 代码中的 ADODB.Stream 将它们序列化为 JSON:

这是 VBA 代码:

Dim st As ADODB.Stream
  ' create a stream object
Set st = New ADODB.Stream
' set properties
st.Charset = "utf-8"
st.Type = adTypeText
' open the stream object and write some text
st.Open
st.WriteText myString
st.SaveToFile filepath, adSaveCreateOverWrite
st.Close

现在我想在 Python 中读取它以将其传递给数据框:

这是 Python 代码:

import JSON
with open(myfilecomplete) as f:
    data = json.load(f)

我收到此错误:

UnicodeDecodeError:“charmap”编解码器无法解码位置 407330 中的字节 0x9d:字符映射到

文件很大(1MB 的文本)。我什至不知道如何找到字符 407330。

此外,我应该以最常见的编码形式以 uft-8 写入光盘。对吧?

为什么 JSON 无法解码 utf-8?

回答/警告后编辑:不要尝试手动从 Excel 序列化 JSON 文件。这几乎总是会导致错误。使用适当的库来执行此操作,例如 here:

【问题讨论】:

  • 非常好,但现在我得到:意外的 UTF-8 BOM(使用 utf-8-sig 解码):第 1 行第 1 列(字符 0)
  • 实际上读取了我可以在回溯中看到的错误消息: if s.startswith('\ufeff'): raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig) " 所以问题是 \ufeff 字符

标签: python json excel vba utf-8


【解决方案1】:

你明白了:


with open(myfilecomplete, encoding='utf-8-sig') as f:
    data = json.load(f)

Here some documentation

【讨论】:

  • 在任何情况下,从 excel 序列化为 JSON 都是一场噩梦,包括单元格中的所有标点符号都会使生成的 JSON 被破坏。我只是意识到。我认为将所有这些表传递给 JSON 会让我立即在 python 中工作,... nopp
  • 也许可以直接从 python 中尝试使用像 xlwings 这样方便的库
  • @Berlines,你能用 pandas 来解析你的 excel 文件吗?
  • 问题是我 VBA 手动生成了 JSON 文件。这些都坏了,因为我的文本包含标点符号。它不会飞。我会尝试使用 xlwings。如果它有效,我会在这里报告,但需要一段时间。
  • 更准确地说,UFT-8 问题已解决,但 JSON 已损坏。
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2019-08-26
  • 2017-09-15
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
相关资源
最近更新 更多