在Python中使用多次出现的split关键字拆分字符串
所以,我想为MongoDB拆分过滤器并更新参数,替换Pymongo库中可用的一个方法在Python中使用多次出现的split关键字拆分字符串,python,mongodb,pymongo,Python,Mongodb,Pymongo,所以,我想为MongoDB拆分过滤器并更新参数,替换Pymongo库中可用的一个方法 {filter}, {update} 从文件传递给我,每行一对 例如:{“k1”:“v1”},{“k1”:“v1”、“k2”:“v2”、“k3”:“v3”} 我想做什么 把它们分开,这样我就能得到两个dict变量 filter = {"k1":"v1"} update = {"k1":"v1", "k2":"v2", "k3":"v3"} 我试过什么 问题是,我不想更改原始格式,如果我使用“,”拆分它们,那
{filter}, {update}
从文件传递给我,每行一对
例如:{“k1”:“v1”},{“k1”:“v1”、“k2”:“v2”、“k3”:“v3”}
我想做什么
把它们分开,这样我就能得到两个dict变量
filter = {"k1":"v1"}
update = {"k1":"v1", "k2":"v2", "k3":"v3"}
我试过什么
问题是,我不想更改原始格式,如果我使用“,”拆分它们,那么它可能会突然拆分,我也不能依赖于第一次出现“,”的拆分,因为过滤器部件本身可能有多个“,”
我认为最简单的方法是在每行周围添加一些方括号,然后将其解释为JSON——假设您的输入格式保证符合JSON 比如:
import json
with open(file_path) as in_file:
list_dict_queries = [('[' + line.strip() + ']') for line in in_file]
query_list = [json.loads(n) for n in list_dict_queries]
如果在其他地方没有大括号/花括号,则可以使用以下方法
>>> filter, update = re.findall('{.*?}', '{"k1":"v1"}, {"k1":"v1", "k2":"v2", "k3":"v3"}')
>>> filter
'{"k1":"v1"}'
>>> update
'{"k1":"v1", "k2":"v2", "k3":"v3"}'
您可以将它们括在括号中,然后调用
ast.literal\u eval()
,例如filter,update=ast.literal\u eval('[{}]'.format(line))
。或者类似地,使用ckiydtryjson.loads(“[{}]'.format(line))
。您可以共享两行或三行输入文件吗?在什么基础上分割文本以进行更新和过滤?字符串可以是JSON中的任何内容。
>>> filter, update = re.findall('{.*?}', '{"k1":"v1"}, {"k1":"v1", "k2":"v2", "k3":"v3"}')
>>> filter
'{"k1":"v1"}'
>>> update
'{"k1":"v1", "k2":"v2", "k3":"v3"}'