Как удалить путь из списка путей в python - PullRequest
0 голосов
/ 29 апреля 2020

Я хотел бы добавить проверку для удаления ../../../source_code/google_test/mock/mock_StateMachine.cpp, если я запускаю свой тестовый файл с именем ../../../source_code /google_test/test/test_StateMachine.cpp.

    ../../../source_code/google_test/test/test_StateMachine.cpp
    ../../../source_code/google_test/test/main_testall.cpp
    ../../../source_code/basesw/20_foundation/sm/StateMachine.cpp
    ../../../source_code/google_test/mock/mock_ModuleProp.cpp
    ../../../source_code/google_test/mock/mock_SuspendState.cpp
    ../../../source_code/google_test/mock/mock_HWConnFilter.cpp
    ../../../source_code/google_test/mock/mock_EvApplState.cpp
    ../../../source_code/google_test/mock/mock_Mutex.cpp
    ../../../source_code/google_test/mock/mock_StartState.cpp
    ../../../source_code/google_test/mock/mock_IApplication.cpp
    ../../../source_code/google_test/mock/mock_ApplicationStateBase.cpp
    ../../../source_code/google_test/mock/mock_StateMachine.cpp

Вот исходный код, который добавляет mock_Filename. cpp, если какой-либо тестовый файл соответствует шаблону test_Filename. cpp. Как изменить его, чтобы удалить mock_Filename. cpp, если какой-либо тестовый файл соответствует шаблону test_Filename. cpp?

srcs_gtest = srcs_gtest + [source_file for source_file in srcs_mock_gtest \
            if any(fnmatch(test_file, "*" + "test" + (os.path.basename(source_file)[4:])) for test_file in srcs_gtest)]

Так что мой ожидаемый результат:

../../../source_code/google_test/test/test_StateMachine.cpp
../../../source_code/google_test/test/main_testall.cpp
../../../source_code/basesw/20_foundation/sm/StateMachine.cpp
../../../source_code/google_test/mock/mock_ModuleProp.cpp
../../../source_code/google_test/mock/mock_SuspendState.cpp
../../../source_code/google_test/mock/mock_HWConnFilter.cpp
../../../source_code/google_test/mock/mock_EvApplState.cpp
../../../source_code/google_test/mock/mock_Mutex.cpp
../../../source_code/google_test/mock/mock_StartState.cpp
../../../source_code/google_test/mock/mock_IApplication.cpp
../../../source_code/google_test/mock/mock_ApplicationStateBase.cpp

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

я нашел ответ:

исключить mock_Filename. cpp, если test_Filename. cpp существует:

for test_file in srcs_gtest:
      if fnmatch(test_file, "*" + "test" + (os.path.basename(source_file)[4:])):
           srcs_gtest.remove(test_file)
0 голосов
/ 29 апреля 2020

Это не продуманный подход, но вы, вероятно, можете

  1. Узнать, соответствует ли ваш файл шаблону
>>> import re
>>> s = '../../../source_code/google_test/test/test_StateMachine.cpp'
KeyboardInterrupt
>>> match = re.search(r"test_[a-zA-Z0-9]*\.cpp", s)
>>> match.start(0)
38
>>> s[38:]
'test_StateMachine.cpp'
>>>
Затем сформируйте имя файла для файлов, которые должны быть отфильтрованы
>>> filename_to_filter = 'mock_' + s[38 + len('test_'):]
>>> filename_to_filter
'mock_StateMachine.cpp'
и, наконец, отфильтруйте список:
>>> files_list = []
>>> files_list.append('../../../source_code/google_test/test/test_StateMachine.cpp')
>>> files_list.append('../../../source_code/google_test/test/mock_StateMachine.cpp')
>>> files_list.append('../../../source_code/google_test/test/mock_StateMachine1.cpp')
>>> files_list.append('../../../source_code/google_test/test/mock_StateMachine2.cpp')
>>> file_lists_to_filter = []
>>> for l in files_list:
...   m = re.search(r"test_[a-zA-Z0-9]*\.cpp", l)
...   if m:
...    filename_to_filter = 'mock_' + s[m.start(0) + len('test_'):]
...    file_lists_to_filter.append(filename_to_filter)
...

>>> files_list = [x for x in files_list if not x.endswith(filename_to_filter)]
>>> files_list
['../../../source_code/google_test/test/test_StateMachine.cpp', '../../../source_code/google_test/test/mock_StateMachine1.cpp', '../../../source_code/google_test/test/mock_StateMachine2.cpp']

(последняя часть, безусловно, может быть оптимизирована)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...