代码之家  ›  专栏  ›  技术社区  ›  MarkS

str.replace()将char替换为“char”

  •  0
  • MarkS  · 技术社区  · 8 年前

    我有一个脚本,它处理从Web API返回的数据。返回的数据是字典列表的字符串表示形式。

    我知道ast.literal_eval()将字典的字符串表示形式转换为实际的。

    数据如下(提醒:这些是字符串,而不是听写):

    new = [{"id": "L0", "tags": null, "disable": false},
           {"id": "L1", "tags": null, "disable": false},
           {"id": "L2", "tags": null, "disable": false}]
    

    因为'null'和'false'没有用引号括起来,ast.literal_eval()失败,并出现错误。如果我手动地在上面的空和假中添加引号,它将工作得很好。

    我试图遍历字符串,并使用此命令将子字符串null和false修改为“null”和“false”,但它不起任何作用:

    for i in new:
        i.replace("null", "\"null\"")
        i.replace("false", "\"false\"")
    

    如何修改这些子字符串以添加括引号?如果可能的话,我宁愿修改现有的列表(new[])而不是创建一个新的列表,但是如果我必须创建一个新的列表才能使其工作,那么这就是我要做的。

    2 回复  |  直到 8 年前
        1
  •  0
  •   Andrej Kesely    8 年前

    您可以在运行前修改数据 ast.literal_eval() ,可能与 re 模块:

    import re
    from ast import literal_eval
    from pprint import pprint
    
    s = """new = [{"id": "L0", "tags": null, "disable": false},
           {"id": "L1", "tags": null, "disable": false},
           {"id": "L2", "tags": null, "disable": false}]"""
    
    s = re.sub('null', '"null"', s)
    s = re.sub('false', '"false"', s)
    s = re.sub('new\s*=\s*', '', s)
    
    new = literal_eval(s)
    pprint(new)
    

    输出:

    [{'disable': 'false', 'id': 'L0', 'tags': 'null'},
     {'disable': 'false', 'id': 'L1', 'tags': 'null'},
     {'disable': 'false', 'id': 'L2', 'tags': 'null'}]
    
        2
  •  1
  •   hygull    8 年前

    @马克 如果 新的 是字典列表的字符串表示形式,您还可以尝试以下代码。

    from ast import literal_eval
    
    new = '''[{"id": "L0", "tags": null, "disable": false},
           {"id": "L1", "tags": null, "disable": false},
           {"id": "L2", "tags": null, "disable": false}]'''
    
    new = new.replace('false', '\"false\"')
    new = new.replace('null', '\"null\"')
    
    print(new)
    """
        [{"id": "L0", "tags": "null", "disable": "false"},
           {"id": "L1", "tags": "null", "disable": "false"},
           {"id": "L2", "tags": "null", "disable": "false"}]
    """
    
    print(literal_eval(new))
    """
        [{'id': 'L0', 'tags': 'null', 'disable': 'false'}, {'id': 'L1', 'tags': 'null', 'disable': 'false'}, {'id': 'L2', 'tags': 'null', 'disable': 'false'}]
    """