I am trying to check what files that are present in my full_list_files are also present in required_list.
The thing here is they are not exactly equal to one other , but macthes with filename and last sub directory.
Example :
'C:UsersDocumentsUpdatedBuildOutputMApplication_1.bin' matches with "M/Application_1.bin" except the slashes are different.
So I am trying to make both uniform by using the function convert_fslash_2_bslash
But still, I see the output as below ,none of the files are matched.
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
How can I get it working correctly.
import os
import sys
import re
full_list_files = {
#These are actually real paths parsed from listdir
#Just for convenience used as strings
'C:UsersDocumentsUpdatedBuildOutputMApplication_1.bin',
'C:UsersDocumentsUpdatedBuildOutputMApplication_2.bin',
'C:UsersDocumentsUpdatedBuildOutputMmasking.tar.gz',
'C:UsersDocumentsUpdatedBuildOutputMBooting.tar.gz',
'C:UsersDocumentsUpdatedBuildOutputNApplication_1.bin',
'C:UsersDocumentsUpdatedBuildOutputNApplication_2.bin',
'C:UsersDocumentsUpdatedBuildOutputNporting.tar.gz',
'C:UsersDocumentsUpdatedBuildOutputOChallenge.tar.gz',
'C:UsersDocumentsUpdatedBuildOutputOHistory.zip',
'C:UsersDocumentsUpdatedBuildOutputOTesting.txt',
'C:UsersDocumentsUpdatedBuildOutputOReport.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"
Advertisement
Answer
Here is the logic you need at the bottom:
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"
You need to loop over both collections, then check to see if the longer path ends with the shorter path. One of your mistakes was calling repr(), which changes the double backslashes to quadruple ones.
I’ll leave it up to you to decide how you’ll handle printing paths that are not present at all.