2016-08-18 4 views
0

Я делал функцию, которая рекурсивно ищет каталоги для файлов с определенными суффиксами.проблема с рекурсивным поиском файлов в python3

TypeError: slice indices must be integers or None or have an index method

указывая на эту линию:

if path.endswith('.',sf)==True: l.append(path)

.endswith() возвращает логическое значение и используются для проверки строк, почему, черт возьми, это дает мне вопросы о том, не являющихся целых числах?

также я решил просто распечатать все и бросить инструкцию try/except, если файл не является каталогом или файлом (это очень быстро происходит в первом запуске). он побежал штраф за минуту или две затем начали выплевывая за исключением пункта

something went wrong with /sys/bus/cpu/devices/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu1/node0/cpu0/node0/cpu1/subsystem/devices/cpu0/node0/cpu0/subsystem/devices/cpu0/subsystem/devices/cpu0/subsystem something went wrong with /sys/bus/cpu/devices/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu1/node0/cpu0/node0/cpu1/subsystem/devices/cpu0/node0/cpu0/subsystem/devices/cpu0/subsystem/devices/cpu0 something went wrong with /sys/bus/cpu/devices/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu0/node0/cpu1/node0/cpu0/node0/cpu1/subsystem/devices/cpu0/node0/cpu0/subsystem/devices/cpu0/subsystem/devices/cpu1/cache/power

ну я просто Ctrl-Z'd вернулся в ipython3 и попробовал еще раз, что сразу же воспитывался то же самое сообщение, даже если указанное каталог был /. почему он вернулся в эту же область?

редактировать: Код

def recursive_search(dr, sf): 
    """searches every potential path from parent directory for files  with  the matching suffix""" 
    l=[]#for all the good little scripts and files with the right last name 
    for name in os.listdir(dr):#for every item in directory 
path=os.path.join(dr, name)#path is now path/to/item 

if os.path.isfile(path): 
    if path.endswith('.',sf)==True: 
    l.append(path) 
else: 
    #try: 
    recursive_search(path, sf) 
    #except: 
    #print ('something went wrong with ', path) 

если он приходит, выглядя странно у меня возникают некоторые проблемы с форматированием.

+1

, где ваш код? –

+2

Я думаю, '' аргумент 'sf'' endswith' не является ни целым числом, ни None, как указано в traceback. Пожалуйста, покажите код, который вы используете. – Frodon

+0

, даже если это не в коде, который я тестировал, начиная с root и поиска скриптов python: recursive_search ('/', 'py') – user58641

ответ

0

Посмотрите на документацию для str.endswith:

>>> help(str.endswith) 
Help on method_descriptor: 

endswith(...) 
    S.endswith(suffix[, start[, end]]) -> bool 

    Return True if S ends with the specified suffix, False otherwise. 
    With optional start, test S beginning at that position. 
    With optional end, stop comparing S at that position. 
    suffix can also be a tuple of strings to try. 

Так вызова "path".endswith('.',"py") проверяет строку path, если она заканчивается "." начиная это проверка с Indice "py", однако "py" не является допустимым Indice, следовательно, ошибка.

Чтобы проверить, если строка заканчивается ".py" вам нужно добавить строки вместе вместо того, чтобы передать его в качестве еще одного аргумента:

path.endswith("."+sf) 
+0

спасибо, что решил. – user58641

Смежные вопросы