Python 如何使用部分Linux路径字符串检查windows路径匹配

Python 如何使用部分Linux路径字符串检查windows路径匹配,python,python-2.7,Python,Python 2.7,我正在尝试检查我的完整列表中存在的文件也存在于必需列表中 这里的问题是它们之间并不完全相等,而是带有文件名和最后一个子目录的macthes 示例: 'C:\Users\Documents\Updated\Build\Output\M\Application\u 1.bin'与“M/Application\u 1.bin”匹配,但斜杠不同。 因此,我尝试使用函数convert\u fslash\u 2\u bslash 但是,我仍然看到如下输出,没有一个文件是匹配的 full_list_files

我正在尝试检查我的
完整列表中存在的文件
也存在于
必需列表中

这里的问题是它们之间并不完全相等,而是带有文件名和最后一个子目录的macthes

示例:
'C:\Users\Documents\Updated\Build\Output\M\Application\u 1.bin'
“M/Application\u 1.bin”
匹配,但斜杠不同。
因此,我尝试使用函数
convert\u fslash\u 2\u bslash

但是,我仍然看到如下输出,没有一个文件是匹配的

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()
,这会将双反斜杠改为四反斜杠


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

下面是您需要的逻辑:

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()
,这会将双反斜杠改为四反斜杠


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

这是完整的程序,我尝试检查了
在必需的配置文件列表中的f\u条目:
,但这似乎不是正确的方法,不是Python的普通用户。您使用Python 2.7有什么原因吗?有什么东西阻止你使用Python3吗?2.7已经过了官方的寿命终止支持期,强烈建议用户升级。我们正在开发的最古老的工具需要一些修改,现在无法更改版本,我手中没有anyway@snakecharmerb
os.path.split()
只返回最后一个组件(
tail
,文件名)和路径的其余部分(
标题
).OP需要最后一个目录加上文件名。是的@MattDMo是正确的,只是尝试了修改,我们用
os.path.split
得到了重复的文件。相同的文件名可能存在于两个不同的子目录中。这是完整的程序,我试着检查
所需配置文件列表中的f\u条目:
,但这似乎不是正确的方法,不是pythonIs的普通用户您使用Python 2.7有什么原因吗?有什么东西阻止您使用Python 3吗?2.7已经过了官方的生命周期结束支持期,强烈建议用户升级。这是我们正在开发的最古老的工具,需要一些修改,现在不能更改版本,不是在我手中anyway@snakecharmerb
os.path.split().OP需要最后一个目录加上文件名。是的@MattDMo是对的,只是尝试了修改,我们用
os.path.split
得到了副本。相同的文件名可能存在于两个不同的子目录hanks@MattDMo,事实上我以前用过这个(endswith),但在HurryThank中无法思考。谢谢@MattDMo,事实上我用过这个(endswith)以前,但不能急于思考