В Windows, используя Python 2.7, содержимое файла считывается, и определенные строки из этого файла (после добавления в начало строки «D: \ abcddev \») помещаются в список с именем FilePathList. Эти строки представляют собой пути к файлам, например:
D:\abcddev\toeblog/folderX/fileA.h
D:\abcddev\toeblog/folderY/fileB.h
Вы заметите, что пути содержат смесь прямой и обратной косой черты. К сожалению, я ничего не могу с этим поделать, они создаются именно так, и я получаю к ним доступ только после этого.
Я хочу проверить, найден ли определенный путь в списке. Путь содержит все обратные косые черты.
Итак, продолжая данный пример, я хочу проверить, есть ли следующее в списке выше:
D:\abcddev\toeblog\folderY\fileB.h
Как видите, эта строка содержит все обратные косые черты.
Итак, моя проблема в том, как проверить равенство независимо от того, является ли sla sh прямым или обратным sla sh.
Моя идея состояла в том, чтобы преобразовать все члены FilePathList для обратных путей, разделенных sla sh, и помещают их в новый список NormalizedFilePathList, а затем для поиска в этом списке пути, который я sh ищу.
Итак, это мой код:
# Declare list
NormalizedFilePathList = []
# Add backward slash separated lines to NormalizedFilePathList
for file in FilePathList:
NormalizedFilePathList.append (os.path.normpath(file))
# Display the contents of NormalizedFilePathList
for file in NormalizedFilePathList
print file
# Create the string to be searched for
test_file = 'D:\abcddev\toeblog\folderY\fileB.h'
# Search for the string in NormalizedPathFileList
if test_file in NormalizedFilePathList:
print "Found test_file"
else:
print "Did not find test_file"
Вот результат вышеуказанного:
D:\abcddev\toeblog\folderX\fileA.h
D:\abcddev\toeblog\folderY\fileB.h
Did not find test_file
Почему это не работает? Очевидно, есть совпадение с 'D: \ abcddev \ toeblog \ folderY \ fileB.h'.
В своем недоумении я попробовал несколько вещей, чтобы прояснить ситуацию, а именно:
Распечатал строки в NormalizedPathFileList с помощью repr (), чтобы увидеть, есть ли какие-либо скрытые символы, препятствующие обнаружению совпадения. Нет, не было.
Создал искусственно новый список, который я заполнил вручную и вместо этого выполнил поиск.
ManualList = ['D:\abcddev\toeblog\folderX\fileA.h','D:\abcddev\toeblog\folderY\fileB.h']
for file in ManualList
print file
# Search for the string in ManualList
if test_file in ManualList:
print "Found test_file"
else:
print "Did not find test_file"
Вот результат:
D:\abcddev oeblog\folderX\fileA.h
D:\abcddev oeblog\folderY\fileB.h
Found test_file
Как видите, в середине строки есть символ табуляции. Это потому, что строка содержит '\ t'
Если я распечатываю test_file по той же причине, я также вижу:
D:\abcddev oeblog\folderY\fileB.h
Это объясняет, почему поиск работает, когда я создаю строку вручную.
Итак, вопрос в том, как избежать символа \ t в строке test_file?
Обратите внимание, что любой код, который я пишу, также должен работать в Linux.