基于高优先级的文件列表转换
Transformation of file list based on higher priority
我在目录中有一个不同名称的文件列表,我需要基于 priority.Files 从 'AB' 开始一次转换所有文件,以便比其他文件具有更高的优先级'CD'。在每个集合中按名称升序排列文件并选择第一个。
输入:
AB_2908_02P.xml
CD_2908_02P.xml
代码:
def Send_Request(self):
Directory = "c://users/request/"
#Type = 'AB','CD'
xml_files = Type + '_' + '2908_02P' + '.xml'
if os.path.exists(Directory+xml_files):
for file in os.listdir(Directory):
#AB_2908_02P.xml
#CD_2908_02P.xml
if file.startswith('AB'):
print ("first priority")
elif file.startswith('CD'):
print("second priority")
谁能告诉我使用优先级队列的最佳方法是什么?
您可以利用 python 的本机功能对元组进行排序。为您的前缀创建一个查找 table prio
,然后使用排序键对文件列表进行排序:该函数为每个文件生成一个元组 (prio, filename) 作为排序标准:
import math
files = [
"AB_2908_02P.xml",
"CD_2908_02P.xml",
"AB_2909_02P.xml",
"CD_2910_02P.xml",
"XY_2908_03P.xml",
"CD_3008_02P.xml",
"AC_xxxx_yyy_zzzzz.xml"
]
prio = {
'AB': 5,
'CD': 0,
'XY': 3
}
for filename in sorted(files, key=lambda f: (prio.get(f.partition('_')[0], math.inf), f)):
print(filename)
打印:
CD_2908_02P.xml
CD_2910_02P.xml
CD_3008_02P.xml
XY_2908_03P.xml
AB_2908_02P.xml
AB_2909_02P.xml
AC_xxxx_yyy_zzzzz.xml
注意:代码使用 math.inf 作为默认优先级,以防没有为特定前缀定义优先级(例如 AC 在上面的例子中)。
我在目录中有一个不同名称的文件列表,我需要基于 priority.Files 从 'AB' 开始一次转换所有文件,以便比其他文件具有更高的优先级'CD'。在每个集合中按名称升序排列文件并选择第一个。
输入:
AB_2908_02P.xml
CD_2908_02P.xml
代码:
def Send_Request(self):
Directory = "c://users/request/"
#Type = 'AB','CD'
xml_files = Type + '_' + '2908_02P' + '.xml'
if os.path.exists(Directory+xml_files):
for file in os.listdir(Directory):
#AB_2908_02P.xml
#CD_2908_02P.xml
if file.startswith('AB'):
print ("first priority")
elif file.startswith('CD'):
print("second priority")
谁能告诉我使用优先级队列的最佳方法是什么?
您可以利用 python 的本机功能对元组进行排序。为您的前缀创建一个查找 table prio
,然后使用排序键对文件列表进行排序:该函数为每个文件生成一个元组 (prio, filename) 作为排序标准:
import math
files = [
"AB_2908_02P.xml",
"CD_2908_02P.xml",
"AB_2909_02P.xml",
"CD_2910_02P.xml",
"XY_2908_03P.xml",
"CD_3008_02P.xml",
"AC_xxxx_yyy_zzzzz.xml"
]
prio = {
'AB': 5,
'CD': 0,
'XY': 3
}
for filename in sorted(files, key=lambda f: (prio.get(f.partition('_')[0], math.inf), f)):
print(filename)
打印:
CD_2908_02P.xml
CD_2910_02P.xml
CD_3008_02P.xml
XY_2908_03P.xml
AB_2908_02P.xml
AB_2909_02P.xml
AC_xxxx_yyy_zzzzz.xml
注意:代码使用 math.inf 作为默认优先级,以防没有为特定前缀定义优先级(例如 AC 在上面的例子中)。