Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用多次出现的split关键字拆分字符串_Python_Mongodb_Pymongo - Fatal编程技术网

在Python中使用多次出现的split关键字拆分字符串

在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"} 我试过什么 问题是,我不想更改原始格式,如果我使用“,”拆分它们,那

所以,我想为MongoDB拆分过滤器并更新参数,替换Pymongo库中可用的一个方法

{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))
。或者类似地,使用ckiydtry
json.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"}'