【问题标题】:Reading unicode objects as a string将 unicode 对象作为字符串读取
【发布时间】:2018-10-02 00:09:22
【问题描述】:

我有一个使用 beautifulsoup 从网站爬取的 excel 表,并将该 unicode 对象结果打印到 csv 中,如

{u'rgb': u'190,190,190', u'type': u'INTERIOR', u'name': u'Orchid, premium Leather'}, {u'rgb': u'60,79, 77', u'type': u'EXTERIOR', u'name': u'Nord Gray Metallic'}

但是现在我无法使用 pandas 作为字典来阅读它们,因为它返回单个字符串,例如 '{',"u"。

我也尝试对字符串进行编码,但没有结果。 我想按原样阅读字典。

【问题讨论】:

  • 由于您标记了json,因此使用json.dumps() 将字典写入CSV,并使用json.loads 将字符串转换回字典。

标签: python json unicode beautifulsoup


【解决方案1】:

您不能将 "[""]" 字符附加到字符串。然后使用eval() 将其转换为字典列表:

f = open("data.csv", "r")
data_string = "[" + f.read() + "]"
data_list = eval(data_string)

for data in data_list:
    print(data)

【讨论】:

    【解决方案2】:

    使用ast 模块中的literal_eval 函数。

    例如:

    import pandas as pd
    import ast
    d = "{u'rgb': u'190,190,190', u'type': u'INTERIOR', u'name': u'Orchid, premium leather'}, {u'rgb': u'60,79,77', u'type': u'EXTERIOR', u'name': u'Nord Gray Metallic'}"
    d = list(ast.literal_eval(d))
    df = pd.DataFrame.from_dict(d)
    print(df)
    

    输出:

                          name          rgb      type
    0  Orchid, premium leather  190,190,190  INTERIOR
    1       Nord Gray Metallic     60,79,77  EXTERIOR
    

    【讨论】:

    • 文件“C:\ProgramData\Anaconda2\lib\ast.py”,第 80 行,在 literal_eval 返回 _convert(node_or_string) 文件“C:\ProgramData\Anaconda2\lib\ast.py”,第 79 行,在 _convert raise ValueError('malformed string') ValueError: malformed string
    • 你能发布一些你的数据吗?看起来字符串有一些不规则性。
    • {u'rgb': u'158,13,23', u'type': u'EXTERIOR', u'name': u'San Marino Red'}, {u'rgb ': u'0,0,0', u'type': u'INTERIOR', u'name': u'Ebony, 优质皮革'}, {u'rgb': u'212,194,160', u'type' : u'INTERIOR', u'name': u'Parchment, premium Leather'}, {u'rgb': u'60,72,110', u'type': u'EXTERIOR', u'name': u' Fathom Blue Pearl'}, {u'rgb': u'73,74,76', u'type': u'EXTERIOR', u'name': u'Modern Steel Metallic'}
    • df['colors'][0] 我的 csv 看起来像这样。
    • 我从网站爬取数据,将部分json直接写入csv。它被打印为 unicode 对象,因为我没有进行任何编码。我想将每个 unicode 对象作为列表元素或单个字符串读取,但它返回一个字母作为字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2019-05-12
    • 2019-09-09
    • 2023-03-20
    • 2015-10-26
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多