首页 > 解决方案 > 如何在python中将安装路径与通配符应用程序名称进行比较

问题描述

我想在 python 中遍历一个数据框,并以此摆脱完整的安装路径。所以只有应用程序名称,例如 firefox.exe 或 firefox 应该被解释,而不是“C:\Program Files\Mozilla Firefox\firefox.exe”。

我创建了一个函数,该函数采用相应的数据帧和一个包含键值对的字典,其中应用程序名称作为键(firefox),通配符路径作为值(*firefox.exe)。

def transform_process_name(mid_result_df, name_dict):
    for row, col in mid_result_df.iterrows():
        for name, value in name_dict.items():
            print(name)
            print(value)
            if col['ProcessName'] == value:
                col['ProcessName'] = name

    return mid_result_df

this 在函数中调用如下:

transform_process_name(mid_result_df, __name_of_processes)

在哪里

__name_of_processes =
{
    'firefox': '*firefox.exe',
}

比较不起作用。所以输出仍然是“C:\Program Files\Mozilla Firefox\firefox.exe”而不是“firefox”。

谢谢 :)

编辑: 它现在适用于

def transform_process_name(mid_result_df, name_dict):

    for row, col in mid_result_df.iterrows():
        for name, value in name_dict.items():
            string_check = col['ProcessName']
            if string_check.endswith(value):
                mid_result_df.at[row, 'ProcessName'] = name
    return mid_result_df

标签: pythonpathwildcard

解决方案


我认为您不能==用来比较“C:\Program Files\Mozilla Firefox\firefox.exe”和“*firefox.exe”。我想你可能想更换

if col['ProcessName'] == value:

if value in col['ProcessName']:

或者

if col['ProcessName'].endswith(value):

并且value应该是“firefox.exe”。

编辑

这是我的代码:

import pandas as pd

def transform_process_name(mid_result_df, name_dict):
    for row, col in mid_result_df.iterrows():
        for name, value in name_dict.items():
            if value in col['ProcessName']:
            # if col['ProcessName'].endswith(value):
                col['ProcessName'] = name
            else:
                col['ProcessName'] = col['ProcessName']
    return mid_result_df


mid_result_df = pd.DataFrame({'ProcessName': ['C:\\Program Files\\Mozilla Firefox\\firefox.exe']})
name_dict = {'firefox': 'firefox.exe'}

result = transform_process_name(mid_result_df, name_dict)
print(result)

推荐阅读