解析推文 json 时出现新人错误 UnicodeEncodeError:“charmap”编解码器无法对位置 13-63 中的字符进行编码:字符映射到

2023-11-29

我正在尝试学习数据科学入门 coursera 课程。但我在尝试解析来自 twitter 的 json 响应时遇到了问题

我正在尝试从以下格式的 json 中检索文本。

{u'delete': {u'status': {u'user_id_str': u'702327198', u'user_id': 702327198, u'id': 332772178690981889L, u'id_str': u'332772178690981889'}}}, {u'delete': {u'status': {u'user_id_str': u'864736118', u'user_id': 864736118, u'id': 332770710667792384L, u'id_str': u'332770710667792384'}}}, {u'contributors': None, u'truncated': False, **u'text'**: u'RT @afgansyah_reza: Lagi ngantri. Ada ibu2 & temennya. "Ih dia mukanya mirip banget sama Afgan.", trus ngedeketin gw, "Tuh kan.. Mirip bang\u2026', u'in_reply_to_status_id': None, u'id': 332772350640668672L, u'favorite_count': 0, ....... ]

这是我使用的代码:

def hw():
    data = []
    count=0
    with open('output.txt') as f:
        for line in f:
            encoded_string = line.strip().encode('utf-8')
            data.append(json.loads(encoded_string))

    print data# generates the input to next block
    for listval in data:#individual block
        if "text" in listval:
            print listval["text"]
        else:
            continue

但是,当我运行它时,我得到以下输出和错误

   RT @afgansyah_reza: Lagi ngantri. Ada ibu2 & temennya. "Ih dia mukanya mirip banget sama Afgan.", trus ngedeketin gw, "Tuh kan.. Mirip bang…
RT @Dimaz_CSIX: Kolor pakek pita #laguharlemshake
Traceback (most recent call last):
  File "F:\ProgrammingPoint\workspace-new\PyTest\tweet_sentiment.py", line 41, in <module>
    main()
  File "F:\ProgrammingPoint\workspace-new\PyTest\tweet_sentiment.py", line 36, in main
    hw()
  File "F:\ProgrammingPoint\workspace-new\PyTest\tweet_sentiment.py", line 23, in hw
    print listval["text"]
  File "C:\Python27\lib\encodings\cp1252.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 13-63: character maps to <undefined>

我是 Python 的新手,任何帮助将不胜感激。


您所有的转换等都是正确的。问题只是想print它到标准输出。

(通常,您会遇到重音、东亚等字符的问题;这里似乎是省略号字符,但这是同样的问题。)

如果您在终端窗口(DOS 提示符等)中运行此命令,则只能打印终端字符集可以处理的字符。因此,例如,在配置为“cp1252”(如您的)的 Windows 机器上,您无法打印非 Latin-1/非 Latin-15/非 ANSI 字符。

(在早期版本的 Python 中,还有一个额外的问题,即 Python 可能无法正确猜测终端的最佳编码,并让您坚持,例如,'ascii'即使它可以处理utf-8, 或者至少cp1252。您可以使用以下命令找出 Python 为 stdout 猜测的编码sys.stdout.encoding。如果这是错误的,您可以明确修复它。)

但是,如果您的终端不是 UTF-8(事实上也不是),您需要告诉它如何处理它无法表示的字符。你可以encode带有显式的字符串errors每当你的参数print他们,像这样:

print u.encode(sys.stdout.encoding, 'replace')

......或其他各种事情。但如果您想在一处解决所有问题,您需要更改打印的默认错误处理程序。

不幸的是,在 Python 2.7 中,虽然sys.stdout确实有一个errors属性,它是只读的。解决这个问题的一种方法是将其替换为原来的包装纸sys.stdout(或围绕其底层文件句柄,或其他等效的东西)。例如:

>>> u = 'RT @afgansyah_reza: Lagi ngantri. Ada ibu2 &amp; temennya. "Ih dia mukanya mirip banget sama Afgan.", trus ngedeketin gw, "Tuh kan.. Mirip bang\xe2\x80\xa6'.decode('utf8')
>>> print u
UnicodeEncodeError: 'charmap' codec can't encode characters in position 13-63: character maps to <undefined>
>>> sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout, errors='replace')
>>> print u
RT @afgansyah_reza: Lagi ngantri. Ada ibu2 &amp; temennya. "Ih dia mukanya mirip banget sama Afgan.", trus ngedeketin gw, "Tuh kan.. Mirip bang?

欲了解更多信息,请阅读2.x Unicode 指南,以及有关的文档print。他们希望你知道unicode对象是一个字符串,因此它不会被转换print,而是传递给write按原样。所以,诀窍是放入某种包装器sys.stdout.write那会写str对象按原样,但进行编码unicode对象不同。任何一个codecs or io可以为你做这个,但是codecs更加向后兼容(并且io更向前兼容,但这在这里没有太大区别,因为 3.x 处理 Unicode 的方式非常不同)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析推文 json 时出现新人错误 UnicodeEncodeError:“charmap”编解码器无法对位置 13-63 中的字符进行编码:字符映射到 的相关文章

  • python,在数据框中存储字典

    我构建了一个 pandas 数据框 它在每个单元格中存储一个简单的字典 例如 Sales 0 Revenue 0 我可以通过以下方式从数据帧中检索特定值 df columnA index100 Revenue 但现在我想绘制一个图表 其中包
  • 如何在Python中测量时间?

    我想启动我的程序 测量程序启动的时间 然后等待几秒钟 按下按钮 K RIGHT 并测量按下按钮的时间 我正在使用 Pygame 来注册 Keydown 但在我下面的代码中它没有注册我的 Keydown 我在这里做错了什么 start tim
  • 如果文件不存在,使用 python 添加一行

    我有一个 xml 文件如下
  • 如何使Python格式的浮点数具有一定数量的有效数字?

    我希望我的 Python 2 4 3 输出数字具有特定的格式 具体来说 如果数字是有效数字 6 位有效数字 则仅输出 6 位有效数字 A 显示了 Python 如何编写浮点数 B 显示了我希望它们如何书写 我怎样才能让Python以这种方式
  • 如何访问命令行参数? [复制]

    这个问题在这里已经有答案了 我使用 python 创建项目设置设置 但我需要帮助获取命令行参数 我在终端上尝试过 python myfile py var1 var2 var3 在我的 Python 文件中 我想使用输入的所有变量 Pyth
  • 如何在 python 中使用 requests.post() 进行代理身份验证?

    from bs4 import BeautifulSoup import requests from requests auth import HTTPProxyAuth url http www transtats bts gov Dat
  • Django 星级评定系统和 AJAX

    我正在尝试在 Django 网站上实现星级评级系统 在我的模型中存储评级是排序的 就像在页面上显示分数一样 但我希望用户能够对页面进行评分 基本上从 1 到 5 而无需刷新或更改页面 我发现了以下内容 并且喜欢这里明星的风格 http jv
  • 来自 ANTLR 解析树的 Python AST?

    我找到了一个ANTLR4 Python3 语法 https github com bkiers python3 parser 但它会生成一个解析树 该树通常有许多无用的节点 我正在寻找一个已知的包来从该解析树获取 Python AST 这样
  • 像多米诺骨牌一样对 Python 中的元组进行排序/查找顶点连接

    我有一个像这样的整数元组列表 L 1 2 7 6 2 3 8 5 3 8 5 7 每对定义两个顶点之间的边 我想找到顶点连接性 没有循环 元组总是像多米诺骨牌一样唯一地链接起来 因此在这种情况下 排序列表应如下所示 L sorted 1 2
  • manage.pysyncdb 不会为某些模型添加表

    今天我的第二个不太熟练的问题 我有一个 django 项目 其中安装了四个应用程序 当我运行manage py syndb时 它只为其中两个创建表 据我所知 我的任何模型文件都没有问题 并且所有应用程序都在我的设置文件中的 INSTALLE
  • 制作一个可以接受各种形状参数的函数

    Q1 Numpy 函数可以采用不同形状的参数 例如 np sum V 可以采用以下两个之一并返回具有不同形状的输出 x1 np array 1 3 1 x2 np array 1 2 3 4 5 6 7 8 2 我正在制作自己的函数 如下所
  • Python 有限边界 Voronoi 单元

    我正在尝试改编我在 stackoverflow 上找到的代码来创建具有有限边界的 voronoi 单元 我发现下面的代码https stackoverflow com a 20678647 2443944 https stackoverfl
  • Pandas groupby 汇总

    如果我有一个这样的数据框 import pandas as pd df pd DataFrame A 1 1 2 B a b c metric 4 5 2 df df groupby A B sum 得到的 df 为 metric A B
  • 基本的 Python OpenCV 裁剪和调整大小

    有人可以帮我一些裁剪算法吗 它的 openCV 我想弄清楚这一点 我知道方法是crop image y y1 x x1 如果我有一个带有 new dimensionXxnew dimensionY 像素的图像 并且我想将其裁剪为相同的宽度
  • 如何为 PyDev 制作文件模板?

    我希望在我创建的每个新文件的顶部都有一些有关许可证 作者等的样板信息 但我找不到要勾选的正确框 基本上 我想创建一个新文件 并已将其填充 在顶部 author Me license something copyright something
  • Matplotlib:以数据坐标中给定的宽度绘制线条

    我试图弄清楚如何绘制具有数据单位宽度的线条 例如 在下面的代码片段中 我希望宽度为 80 的线的水平部分始终从 y 40 延伸到 y 40 标记 并且即使坐标系的限制也保持这种状态改变 有没有办法用 matplotlib 中的 Line2D
  • 为什么我必须在 pybson (=bson, GitHub:py-bson) 之后安装 pymongo 才能成功导入 pybson?

    编辑 将问题放在网上很长时间后 我注意到这是一个衍生产品无法使用 pymongo 2 2 连接到 MongoDB 2 0 5 数据库 https stackoverflow com questions 10603754 cant conne
  • 删除 numpy 中的循环以进行简单的矩阵分配

    如何删除这个简单矩阵分配中的循环以提高性能 nk ncol nrow index shape for kk in range 0 nk for ii in range 0 nrow for jj in range 0 ncol idx in
  • 你能在 Python 语法中添加新的语句吗?

    您可以添加新的语句 例如print raise with 到 Python 的语法 说 允许 mystatement Something Or new if True print example 没那么多 如果你should 而是如果可能的
  • 缩放插图中不同的 x 和 y 比例,matplotlib

    我正在尝试使用 matplotlib 制作插图 目前我有类似最后一个答案的内容如何缩放图像的一部分并插入到 matplotlib 中的同一图中 https stackoverflow com questions 13583153 how t

随机推荐