Python中字符串转化问题如何处理?

比较喜欢玩梦幻西游,最近准备买号,自己看梦幻藏宝阁呢 又没空,就想着用 scrapy 抓点符合要求的数据回来,但是,当抓到用户关键信息的时候,网易返回给我的是类似下面的一段字符串,我想着给他转成一个字典或者 python 内部能识别的数据格式,但是我发现我真的不知道怎么转化。我目前的方案之后一个,那就是正则匹配,但是我感觉正则匹配是不是蠢了点。有没有大神帮我解决下这个问题的。

这儿是返回的字符串:(我已经做好了换行,记住是一个字符串,不是 python 的 list、tuple、dict)

'([
        "farm_level":"3",
        "usernum":10836654,
        "iMaxExpt3":20,
        "iBeastSki4":17,
        "rent":88332,
        "iCGTotalAmount":30,
        "xianyu":12,
        "iHp_Max":2711,
        "more_attr":(["attrs":({(["lv":0,"idx":1,]),(["lv":0,"idx":3,]),(["lv":0,"idx":9,]),(["lv":0,"idx":12,]),(["lv":0,"idx":8,]),(["lv":0,"idx":6,]),(["lv":0,"idx":11,]),(["lv":0,"idx":7,]),(["lv":0,"idx":5,]),(["lv":0,"idx":4,]),(["lv":0,"idx":2,]),(["lv":0,"idx":10,]),(["lv":129,"idx":13,]),(["lv":444,"idx":14,]),}),]),
        "AllRider":([7:(["mattrib":"","ExtraGrow":0,"exgrow":12904,"iGrade":125,"iType":508,"all_skills":([]),]),5:(["mattrib":"","ExtraGrow":0,"exgrow":13106,"iGrade":125,"iType":503,"all_skills":([]),]),4:(["mattrib":"体质","ExtraGrow":0,"exgrow":13112,"iGrade":125,"iType":502,"all_skills":([611:1,]),]),6:(["mattrib":"魔力","ExtraGrow":100,"exgrow":23075,"iGrade":125,"iType":508,"all_skills":([600:2,601:3,]),]),2:(["mattrib":"力量","ExtraGrow":90,"exgrow":22297,"iGrade":125,"iType":503,"all_skills":([600:2,601:3,]),]),]),

    "iLearnCash":8213515,
    "iBadness":0,
    "ExAvt":([11:(["order":7,"cName":"锦绣幻梦","iType":12823,]),9:(["order":11,"cName":"藤蔓蔓延","iType":14694,]),6:(["order":4,"cName":"落星织","iType":12750,]),2:(["order":5,"cName":"蓝色妖姬","iType":14404,]),1:(["order":10,"cName":"星光熠熠","iType":21513,]),3:(["order":9,"cName":"锦绣幻梦","iType":12817,]),10:(["order":8,"cName":"两心相悦","iType":14654,]),8:(["order":6,"cName":"星光熠熠","iType":21514,]),7:(["order":1,"cName":"萌草发卡","iType":13696,]),39:(["order":2,"cName":"狼牙棒","iType":11169,]),40:(["order":12,"cName":"怀旧巨魔王炫卡","iType":19287,]),4:(["order":3,"cName":"落星织","iType":40013,]),]),

    "iDef_All":410,
    "iSewski":472,
    "iSumAmount":9,
    "iSpe_All":119,
    "iMaxExpt4":20,
    "sword_score":1000,
    "AchPointTotal":4520,
    "iGoodness":7230,
    "addPoint":28,
    "iSumAmountEx":1,
    "cName":"水儋澹兮生烟",
    "iSaving":0,
    "rent_level":5,
    "iBeastSki3":17,

    ......

)]’


Python中字符串转化问题如何处理?

13 回复

import json
json.loads(’[“foo”, {“bar”:[“baz”, null, 1.0, 2]}]’)


核心思路:字符串转换本质是类型转换和编码处理,关键看你的数据来源和目标格式。

直接上代码示例,覆盖几个最常见的场景:

1. 基本类型转字符串(str())

num = 42
float_num = 3.14
lst = [1, 2, 3]

str_num = str(num)          # "42"
str_float = str(float_num)  # "3.14"
str_lst = str(lst)          # "[1, 2, 3]"

2. 字符串转其他类型(int(), float(), eval()等)

s = "123"
num = int(s)      # 123
f = float("3.14") # 3.14

# 注意安全:eval()能执行任意代码,处理不可信数据时用ast.literal_eval()
import ast
safe_list = ast.literal_eval("[1, 2, 3]")  # [1, 2, 3]

3. 编码问题处理(bytes ↔ str)

# str转bytes(编码)
text = "你好世界"
bytes_data = text.encode('utf-8')  # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'

# bytes转str(解码)
original_text = bytes_data.decode('utf-8')  # "你好世界"

# 处理乱码常见方案
def fix_mojibake(mojibake_str):
    try:
        return mojibake_str.encode('latin-1').decode('gbk')
    except:
        return mojibake_str

4. 格式化字符串(f-string最推荐)

name = "张三"
age = 25
result = f"{name}今年{age}岁"  # "张三今年25岁"

5. JSON字符串与Python对象互转

import json

# 对象转JSON字符串
data = {"name": "李四", "score": 95}
json_str = json.dumps(data, ensure_ascii=False)  # {"name": "李四", "score": 95}

# JSON字符串转对象
parsed = json.loads(json_str)  # {'name': '李四', 'score': 95}

一句话建议:先明确你的输入格式和输出目标,再选择对应的转换方法。

这不就是这个正常的 json 吗

[]换成{}, {}换成[],删除(),就是 dict 了

()删掉
{}和[]互换
然后 json.loads

此贴终结

这是这正常的 json ?

这样能用 我又何必来这儿发帖求助

关键就是如何替换

替换不就 replace 么

楼上说的差不多了,只是替换后仍不是标准 json,有的键为数字,且有逗号结尾,不能直接 json.loads。还有一个是你给的字符串开头是([,结尾是)],并不匹配,如果是成对的]),可以这样:
eval(text.replace(’([’, ‘{’).replace(’])’, ‘}’).replace(’({’, ‘[’).replace(’})’, ‘]’))
如果想把()替换删掉,{}和[]互换,那替换时得加个临时的替换符号

哎 果然只有死方法,用正则先替换,谢谢大家 解析出来了

回到顶部