如何检查 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()
,它将双反斜杠更改为四重反斜杠。
我将由您决定如何处理根本不存在的打印路径。
我正在尝试检查 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()
,它将双反斜杠更改为四重反斜杠。
我将由您决定如何处理根本不存在的打印路径。