Python 根据列表中的条件更改字符串的一部分

Python Change part of a string based on a condition from a list

嗨,我正在尝试制作一个 python 脚本,每次脚本 运行.

时都会更新一行

我对如何最好地处理我必须根据数据帧的值更新每一行(select 语句)的部分感到有点头疼。

简化我得到一个字符串'select null r_cnt, null t_cnt, null r_dur, null t_dur from my_table'

我得到了一个包含该行字段的列表 [t_cnt, r_dur]

然后我希望新字符串输出成为第一个字符串,在该字符串中,我们删除了列表中存在的值前面的空值,但在不在列表中的值前面保留了空值。

'select null r_cnt, t_cnt, r_dur, null t_dur from my_table'

我的整个代码现在看起来像这样,我卡在上面提到的地方

str_to_execute = f"select * from {db}.table_desc where grp_id in (400,500,300,1200) and id not in(127,140,125)"
    cursor.execute(str_to_execute)
    df = as_pandas(cursor)

    for index, row in df.iterrows():
        # print(row['name'])
        str_to_execute = f"SHOW COLUMN STATS {db}.ctrl_{row['id']}"
        cursor.execute(str_to_execute)
        loop = as_pandas(cursor)
        for index, row in loop.iterrows():
            print(row['Column'])
            
            str_to_execute = f"select concat(cast(ctrl_id as string),cast(ctrl_date as string)) primarykey, ctrl_id, ctrl_date,null r_cnt, null t_cnt, null r_dur, null t_dur,null r_amt, null t_amt,null p_cnt, null p_dur,null p_amt, null ro_vol, null t_vol, null r_vol, null p_vol, null ro_amt, null ro_cnt,    from {db}.ctrl_{row['id']}"
            if #This is where im stuck

在这种情况下,您可以将字符串的功能 Selectfrom my table 从语句的输入中分离出来,如果我正确理解您的字符串列表,这或多或少。

一种可能的解决方案如下:

  1. 定义或获取您的字符串列表:

origin_list = ["null r_cnt", "null t_cnt", "null r_dur", "null t_dur"]

goal_list = ["t_cnt", "r_dur"]

  1. 对于 origin_list 的每个元素,您想要根据其在 goal_list 中的存在来编辑该元素,我会使用映射和 lambda 来完成:

edited_list = list(map(lambda x: edit(x, goal_list), origin_list))

  1. 现在我们必须根据您的 post 定义函数和逻辑 我推导出以下逻辑或类似的东西:

  1. 现在您有了调整后的字符串,可以将其与您的功能合并。

尝试:

s = 'select null r_cnt, null t_cnt, null r_dur, null t_dur from my_table'
lst = ['t_cnt', 'r_dur']

checklist = ['null r_cnt', 'null t_cnt', 'null r_dur']
checkliststr = ','.join(checklist)

for itm in lst:
    if itm in checkliststr:
        print('null ' + itm)
        s=s.replace('null ' + itm, itm)
print(s)