首页 > 解决方案 > 在 Python 中拆分字符串,多次出现 split 关键字

问题描述

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

{filter}, {update}

从文件传递给我,每行一对

例如:{"k1":"v1"}, {"k1":"v1", "k2":"v2", "k3":"v3"}

我想做什么?

拆分它们,以便我得到两个 dict 变量,

filter = {"k1":"v1"}
update = {"k1":"v1", "k2":"v2", "k3":"v3"}

我试过什么?

问题是,我不想更改原始格式,如果我使用“,”拆分它们,那么它可能会突然拆分,我也不能依赖于第一次出现“,”的拆分,因为过滤器部分本身可能有多个“ "

def data_replace_one(host, port, dbname, coll_name, file_path, authdb):

    if LOCALHOST:
        client = pymongo.MongoClient(host, port)       
    else:
        print("Enter credentials:")
        uname = input("Username: ")
        pwd = getpass.getpass()

        client = pymongo.MongoClient(
            host, port, username=uname, password=pwd, authSource=authdb)

    db = client[dbname]
    coll = db[coll_name]

    with open(file_path) as in_file:
        list_dict_queries = [line.strip() for line in in_file]

    list_dict_queries = list(filter(None, list_dict_queries))

    for query in list_dict_queries:
        query_list = query.split("|")
        query_list[0] = query_list[0].strip()
        query_list[1] = query_list[1].strip()
        #print(literal_eval(query_list[0]), literal_eval(query_list[1]))
        coll.replace_one(literal_eval(
            query_list[0]), literal_eval(query_list[1]))

标签: pythonmongodbpymongo

解决方案


如果您在其他任何地方都没有大括号/大括号,那么您可以使用以下内容。

>>> filter, update = re.findall('{.*?}', '{"k1":"v1"}, {"k1":"v1", "k2":"v2", "k3":"v3"}')

>>> filter
'{"k1":"v1"}'

>>> update
'{"k1":"v1", "k2":"v2", "k3":"v3"}'

推荐阅读