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中字符串转化问题如何处理?
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(’})’, ‘]’))
如果想把()替换删掉,{}和[]互换,那替换时得加个临时的替换符号
哎 果然只有死方法,用正则先替换,谢谢大家 解析出来了

