基于高优先级的文件列表转换

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 在上面的例子中)。