如何在 python 中将安装路径与通配符应用程序名称进行比较
How to compare an installation path with a wildcarded application name in python
我想遍历 python 中的一个数据帧,并以此摆脱完整的安装路径。所以只有应用程序名称,例如应说明 firefox.exe 或 firefox 而不是 "C:\Program Files\Mozilla Firefox\firefox.exe"。
我创建了一个函数,它采用相应的数据帧和一个包含键值对的 dcitonary,其中应用程序名称作为键 (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
在函数中调用如下:
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
应该是'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)
也许我没有很好地理解这个问题,但是如果你有一个包含每个应用程序路径的数据框,你为什么不使用 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)
在这里,我创建了一个带有应用程序路径的虚拟数据框。然后我定义了一个给定路径的函数,returns 只有应用程序名称 (basename
) 没有点 (splitext
).
apply 方法将函数应用于数据帧的每个元素,并将输出存储在新列中。
结果:
full_path application
0 C:/Program Files/Mozilla Firefox/firefox.exe firefox
1 C:/Program Files/Mozilla Firefox/myapp.exe myapp
我想遍历 python 中的一个数据帧,并以此摆脱完整的安装路径。所以只有应用程序名称,例如应说明 firefox.exe 或 firefox 而不是 "C:\Program Files\Mozilla Firefox\firefox.exe"。
我创建了一个函数,它采用相应的数据帧和一个包含键值对的 dcitonary,其中应用程序名称作为键 (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
在函数中调用如下:
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
应该是'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)
也许我没有很好地理解这个问题,但是如果你有一个包含每个应用程序路径的数据框,你为什么不使用 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)
在这里,我创建了一个带有应用程序路径的虚拟数据框。然后我定义了一个给定路径的函数,returns 只有应用程序名称 (basename
) 没有点 (splitext
).
apply 方法将函数应用于数据帧的每个元素,并将输出存储在新列中。
结果:
full_path application
0 C:/Program Files/Mozilla Firefox/firefox.exe firefox
1 C:/Program Files/Mozilla Firefox/myapp.exe myapp