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