【问题标题】:Jupyter notebooks - how to move utf-8 characters between scripts?Jupyter 笔记本 - 如何在脚本之间移动 utf-8 字符?
【发布时间】:2019-04-01 00:46:11
【问题描述】:

我正在使用 jupyter 笔记本中的脚本。为了代码清晰,我想将一些定义“外包”到第二个脚本中。 但是在定义中有变音符号、'ü's、'ä's、'ö's 和其他。 定义如下所示:

an_outsourced_dict = {'Hello': 'Hallo', 'Door': 'Tür'}

在使用 importlib '导入'第二个脚本时遇到问题后,我现在正在运行

%run myotherscript.ipynb

在第一个脚本中,然后可以访问 myotherscript.ipynb 中定义的任何内容。

问题: 调用脚本中an_outsourced_dict的内容为{'Door': 'Tür', 'Hello': 'Hallo'}an_outsourced_dict['Door'] == 'Tür'返回False

另外,当我在 mysecondscript.ipynb 中添加 print(an_outsourced_dict) 时,当通过 %run 调用时,它也会打印 'Tür'。 但是从主脚本定义和打印它会给出一个“Tür”。

(如何)这可以解决吗?现在我将所有内容都放在一个脚本中。

This 似乎相关,但我的问题不在于将任何内容写入文件。


附加信息:

Python 3.5 版,尝试按照here 的描述获取 ipython 版本也会出现编码错误:) 我在 Windows (8.1) 上

【问题讨论】:

  • 我无法重现您的问题(Xubuntu 18.10、Python 3.6.7rc1、Jupyter 4.4.0)。我创建了一个 Python 3 笔记本“parent.ipynb”,其中包含print('Hello Tür'),然后在第二个打印“Hello Tür”的笔记本中做了%run parent.ipynb。编码好像是utf-8,不知道为什么。请与import sys; sys.getdefaultencoding()联系。
  • @lumbric ,感谢您尝试复制。我的设置有点不同:我定义了字典,然后打印(thedict),而不仅仅是打印(“带有很多ü的字符串”)。是的,python 3 的默认编码似乎是 utf-8(来自我在搜索时发现的其他问题);这也是我运行 sys.getdefaultcoding() - 'utf-8' 时的输出。
  • 脚本之间的编码似乎搞砸了
  • 我可以使用 Python 3.3(笔记本 4.2.3)进行复制,但使用 Python 3.7(笔记本 5.7.0)运行并刷新正确打印的单元格。看起来旧的 Jupyter 笔记本使用 Windows 默认的 ANSI 编码(可能是 Windows-1252)解码了导入的脚本,而新的默认为 UTF-8。 .ipynb 内容被编码为 UTF-8。所以看起来它只是笔记本中的一个错误或其依赖项,已在较新版本中得到修复。

标签: python utf-8 jupyter-notebook


【解决方案1】:

我以前遇到过这个问题。您可以尝试将字典转储到 .json 文件,如下所示:

with open('output.json', 'w', encoding='utf-8') as output_file:
    json.dump(your_dictionary, output_file, ensure_ascii=False, indent=4)
    lables_file.write("\n")

ensure_ascii=False 将确保.json 文件的输出字符符合您的预期

【讨论】:

  • 谢谢,这可能是一种解决方法,是的......也许在这种情况下从 .json 加载比运行另一个脚本更干净,即使你必须通过另一个格式。
  • @dasWesen 如果您的字典中的键少于 1000 万个,则根本不会影响程序的性能。或许你可以尝试类似ensure_ascii=False的方法来解决问题
  • 更改 python 版本似乎有点太多了,所以我现在正在使用你的解决方法。感谢您的参数设置,到目前为止效果很好。
猜你喜欢
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
相关资源
最近更新 更多