如何在Python中从建议列表获取随机完整建议而非单个单词?
解决方法:获取随机完整建议列表项
你的代码问题出在:将解析得到的列表res转成字符串写入文件后,读取时用split()会把整个字符串按空格拆分成单个单词,导致random.choice只能选中单个单词。
最优方案(无需中间文件)
直接使用解析得到的列表res,跳过写入/读取文件的步骤,效率更高:
import json import random import dpath.util as dp with open('.logs') as json_file: data = json.load(json_file) res = dp.values(data, "/posts/*/com") # 先判断列表非空,避免索引错误 if res: random_suggestion = random.choice(res) print(random_suggestion) else: print("未找到任何建议内容")
若必须使用中间文件的方案
如果需要将列表写入.text文件再读取,不要直接用str(res)存储,改用JSON格式读写更安全:
import json import random import dpath.util as dp with open('.logs') as json_file: data = json.load(json_file) res = dp.values(data, "/posts/*/com") # 用json.dump将列表写入文件 with open(".text", "w") as file: json.dump(res, file) # 用json.load读取文件还原列表 with open(".text", "r") as file: res_list = json.load(file) if res_list: random_suggestion = random.choice(res_list) print(random_suggestion) else: print("未找到任何建议内容")
也可以用ast.literal_eval解析字符串还原列表(适合存储了str(res)格式的文件):
import json import random import dpath.util as dp import ast with open('.logs') as json_file: data = json.load(json_file) res = dp.values(data, "/posts/*/com") with open(".text", "w") as file: file.write(str(res)) with open(".text", "r") as file: tt = file.read() # 把字符串形式的列表还原成真实列表 res_list = ast.literal_eval(tt) if res_list: random_suggestion = random.choice(res_list) print(random_suggestion) else: print("未找到任何建议内容")
内容的提问来源于stack exchange,提问作者Yui
相关产品推荐
相关产品推荐

