如何在 python 中将安装路径与通配符应用程序名称进行比较


我想在python

中遍历一个数据帧,并以此摆脱完整的安装路径。因此,只应说明应用程序名称,例如 Firefox.exe 或 Firefox,而不是"C:\Program Files\Mozilla Firefox\firefox.exe"。

我创建了一个函数,该函数将相应的数据帧和一个包含键值对的 dcitonary,其中应用程序名称作为键(火狐(,通配符路径作为值(*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

这在函数中调用,如下所示:

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

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

if col['ProcessName'] == value:

if value in col['ProcessName']:

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

value应该是"火狐.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)

也许我不太理解这个问题,但是如果您有一个包含每个应用程序路径的数据帧,为什么不使用 os 模块中的本机函数来提取应用程序本身的名称?

例如:

import pandas as pd
import os

def get_application(path):
    return os.path.splitext(os.path.basename(path))[0]

path = "C:/Program Files/Mozilla Firefox/"
df = pd.DataFrame([os.path.join(path + "firefox.exe"), os.path.join(path + "myapp.exe")],
                  columns=["full_path"])
df["application"] = df["full_path"].apply(get_application)
print(df)

在这里,我创建了一个包含应用程序路径的虚拟数据帧。然后我定义一个函数,该函数给定一个路径,只返回应用程序名称(basename(而不返回点(splitext(。
apply 方法将函数应用于数据帧的每个元素,输出存储在新列中。

结果:

                                      full_path application
0  C:/Program Files/Mozilla Firefox/firefox.exe     firefox
1    C:/Program Files/Mozilla Firefox/myapp.exe       myapp

相关内容

  • 没有找到相关文章

最新更新