如何检查 windows 路径与部分 Linux 路径字符串匹配

How to check the windows path matches with partial Linux path string

我正在尝试检查 full_list_files 中存在的哪些文件也存在于 required_list 中。
这里的问题是它们并不完全等同于另一个,而是具有文件名和最后一个子目录的 macthes。

示例:
'C:\Users\Documents\Updated\Build\Output\M\Application_1.bin'"M/Application_1.bin" 匹配,只是斜杠不同。
所以我试图通过使用函数 convert_fslash_2_bslash

使两者统一

但是,我仍然看到如下输出,none 个文件匹配。

full_list_files =  set(['C:\Users\Documents\Updated\Build\Output\O\Report.tar.gz', 'C:\Users\Documents\Updated\Build\Output\N\Application_2.bin', 'C:\Users\Documents\Updated\Build\Output\O\Testing.txt', 'C:\Users\Documents\Updated\Build\Output\M\masking.tar.gz', 'C:\Users\Documents\Updated\Build\Output\N\Application_1.bin', 'C:\Users\Documents\Updated\Build\Output\M\Application_1.bin', 'C:\Users\Documents\Updated\Build\Output\O\History.zip', 'C:\Users\Documents\Updated\Build\Output\O\Challenge.tar.gz', 'C:\Users\Documents\Updated\Build\Output\M\Application_2.bin', 'C:\Users\Documents\Updated\Build\Output\N\porting.tar.gz', 'C:\Users\Documents\Updated\Build\Output\M\Booting.tar.gz'])

original required_list =  set(['N/Application_2.bin', 'M/masking.tar.gz', 'N/Application_1.bin', 'O/Challenge.tar.gz', 'M/Application_1.bin', 'O/Testing.txt', 'M/rooting.tar.gz', 'M/Application_2.bin', 'O/History.zip', 'N/porting.tar.gz', 'O/Report.tar.gz'])

modified required_list =  ['N\Application_2.bin', 'M\masking.tar.gz', 'N\Application_1.bin', 'O\Challenge.tar.gz', 'M\Application_1.bin', 'O\Testing.txt', 'M\rooting.tar.gz', 'M\Application_2.bin', 'O\History.zip', 'N\porting.tar.gz', 'O\Report.tar.gz']

'C:\Users\Documents\Updated\Build\Output\O\Report.tar.gz'  not present
'C:\Users\Documents\Updated\Build\Output\N\Application_2.bin'  not present
'C:\Users\Documents\Updated\Build\Output\O\Testing.txt'  not present
'C:\Users\Documents\Updated\Build\Output\M\masking.tar.gz'  not present
'C:\Users\Documents\Updated\Build\Output\N\Application_1.bin'  not present
'C:\Users\Documents\Updated\Build\Output\M\Application_1.bin'  not present
'C:\Users\Documents\Updated\Build\Output\O\History.zip'  not present
'C:\Users\Documents\Updated\Build\Output\O\Challenge.tar.gz'  not present
'C:\Users\Documents\Updated\Build\Output\M\Application_2.bin'  not present
'C:\Users\Documents\Updated\Build\Output\N\porting.tar.gz'  not present
'C:\Users\Documents\Updated\Build\Output\M\Booting.tar.gz'  not present

如何让它正常工作。

import os
import sys
import re

full_list_files = {
    #These are actually real paths parsed from listdir
    #Just for convenience used as strings
    'C:\Users\Documents\Updated\Build\Output\M\Application_1.bin',
    'C:\Users\Documents\Updated\Build\Output\M\Application_2.bin',
    'C:\Users\Documents\Updated\Build\Output\M\masking.tar.gz',
    'C:\Users\Documents\Updated\Build\Output\M\Booting.tar.gz',
    'C:\Users\Documents\Updated\Build\Output\N\Application_1.bin',
    'C:\Users\Documents\Updated\Build\Output\N\Application_2.bin',
    'C:\Users\Documents\Updated\Build\Output\N\porting.tar.gz',
    'C:\Users\Documents\Updated\Build\Output\O\Challenge.tar.gz',
    'C:\Users\Documents\Updated\Build\Output\O\History.zip',
    'C:\Users\Documents\Updated\Build\Output\O\Testing.txt',
    'C:\Users\Documents\Updated\Build\Output\O\Report.tar.gz'
}

required_list = {
    "M/Application_1.bin",
    "M/Application_2.bin",
    "M/masking.tar.gz",
    "M/rooting.tar.gz",
    "N/Application_1.bin",
    "N/Application_2.bin",
    "N/porting.tar.gz",
    "O/Challenge.tar.gz",
    "O/History.zip",
    "O/Testing.txt",
    "O/Report.tar.gz"
}

def convert_fslash_2_bslash(required_file_list):
    required_config_file_list = []
    i = 0
    for entry in required_file_list:
        entry = entry.strip()
        entry = entry.replace('"',"")
        entry = entry.replace('/','\')
        required_config_file_list.insert(i, entry)
        i = i + 1
    return required_config_file_list

if __name__ == "__main__":

    print

    print "full_list_files = ", full_list_files

    print

    print "original required_list = ", required_list

    print

    required_config_file_list = convert_fslash_2_bslash(required_list)

    print "modified required_list = ", required_config_file_list

    print

    for f_entry in full_list_files:
        f_entry = repr(f_entry)
        #for r_entry in required_config_file_list:
        #if ( f_entry.find(r_entry) != -1):
        if f_entry in required_config_file_list:
            print f_entry ," present"
        else:
            print f_entry ," not present"

下面是你需要的逻辑:

for f_entry in full_list_files:
    for r_entry in required_config_file_list:
        if f_entry.endswith(r_entry):
            print f_entry, " present"

您需要遍历两个 集合,然后检查较长的路径是否以较短的路径结束。您的错误之一是调用 repr(),它将双反斜杠更改为四重反斜杠。

我将由您决定如何处理根本不存在的打印路径。