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

Posted

技术标签:

【中文标题】Python根据列表中的条件更改字符串的一部分【英文标题】:Python Change part of a string based on a condition from a list 【发布时间】:2021-05-27 12:39:54 【问题描述】:

您好,我正在尝试制作一个 python 脚本,每次运行脚本时都会更新一行。

对于如何最好地解决我必须根据数据帧的值更新每一行(选择语句)的部分,我有点头疼。

我得到了一个字符串'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

【问题讨论】:

【参考方案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)

【讨论】:

这么好的解决方案,我使用你的 for 循环而不是我自己的第二个循环将它实现到我的代码中。完美运行。谢谢 很高兴知道并感谢您接受答案。【参考方案2】:

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

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

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

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

goal_list = ["t_cnt", "r_dur"]

    对于origin_list 的每个元素,您想根据它在goal_list 中的存在来编辑该元素,我会使用地图和lambda:

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

    现在我们必须从您的帖子中定义功能和逻辑,我得出以下逻辑或类似的东西:

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

【讨论】:

以上是关于Python根据列表中的条件更改字符串的一部分的主要内容,如果未能解决你的问题,请参考以下文章

根据存储在 data.frame 中的单独字符向量,有条件地重命名列表中的列

Android - 从 sqlite 获取字符串数据并使用 if 条件更改列表视图输入

s-s-rS 根据条件逻辑更改部分表达式的颜色

python怎么把列表转换成字符串?

根据列表中项目内的部分字符串查找列表中的所有索引位置

如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改