#python #regex #for-loop #directory
#python #Регулярное выражение #for-цикл #каталог
Вопрос:
У меня есть список каталогов в виде списка на python со следующими данными:
/a
/a/b
/a/b/1
/a/b/2
/a/b/3
/a/c
/a/c/1
/a/c/2
/a/c/3
/a/d
/a/d/1
/a/d/2
/f
/f/g
/f/g/h
/f/g/i
/f/g/j
И я хочу отобразить выходные данные в следующем формате:
/a
/b
/1
/2
/3
/c
/1
/2
/3
/d
/1
/2
/f
/g
/h
/i
/j
Я использую следующую функцию python, но она выводит непоследовательный вывод:
def formatVFS(lst):
for line in lst:
l1 = list(lst)
l2 = []
if re.search(r'^/w ', line) != None:
temp = re.search(r'^/w ', line).group()
print 'tt', temp
for line2 in l1:
if line2.startswith(temp):
lst.remove(line2)
line2 = line2.replace(temp, '')
if line2!= '':
l2.append(line2)
print 'ttt',line2
formatVFS(l2)
Есть предложения?
Комментарии:
1. «он печатает непоследовательный вывод» , пожалуйста, включите его в свой вопрос
2. Также примечание:
print 't...
синтаксис python2. Python 2 достиг EOL ранее в этом году. Если у вас нет веской причины использовать Python 2, вам следует использовать Python 3.3. Я должен использовать эту программу в устаревшей системе. Поэтому невозможно изменить версию Python. Установленная версия python — 2.7.5
4. Это хорошая причина для использования Python 2 🙂
Ответ №1:
Пожалуйста, попробуйте приведенную ниже программу, она выполняет поиск и заменяет /w
то, чего нет в конце строки, на tab. предполагая, что папки находятся в ожидаемом порядке. если нет, вы можете отсортировать его перед отображением.
import re
l=["/a","/a/b","/a/b/1","/a/b/2","/a/b/3","/a/c","/a/c/1","/a/c/2","/a/c/3","/a/d","/a/d/1","/a/d/2","/f","/f/g","/f/g/h","/f/g/i","/f/g/j"]
for i in l:
print(re.sub(r"/w (?=/(?!$))","t",i))
Вывод
/a
/b
/1
/2
/3
/c
/1
/2
/3
/d
/1
/2
/f
/g
/h
/i
/j
Комментарии:
1. Спасибо @Liju за ваш ответ. Программа отлично работает с заданным вводом, но выдает ошибку с этим типом данных / / работа / работа / архив / работа / извлечение / работа / нажатие / работа / автозапуск / работа / автозапуск / работа / распределение / работа / распределение / 1 / работа / распределение / 2 / работа /распределение / 3 / работа / распределение / 4 / работа / распределение / 5 / работа / распределение / 6 / работа / распределение / 7 / работа / распределение / 8 / работа / распределение / 9 / работа / распределение / 10 / работа / триггер
2. @FarmanAhmed когда вы просите о помощи, всегда лучше предоставить как можно больше соответствующих деталей . «Он выдает такую-то ошибку в строке x» или «он печатает abc вместо xyz» намного лучше , чем сказать «это не работает».
3. @FarmanAhmed, я обновил приведенную выше программу. пожалуйста, проверьте.
4. @Liju он по-прежнему выдает ошибку с этим типом данных / zzzAdmin / zzzAdmin / zzzAdmin_MFT1.0-vfs / zzzAdmin / zzzAdmin_MFT1.0-vfs / adhoc 1113 / zzzAdmin / zzzAdmin_MFT1.0-vfs/adhoc /fromSSC 1114 /zzzAdmin / zzzAdmin_MFT1.0-vfs /adhoc /toSSC 1115 / zzzAdmin/zzzAdmin_MFT1.0-vfs/fromSSC 1111 /zzzAdmin/zzzAdmin_MFT1.0-vfs/fromSSC/архив 1112 /zzzAdmin/zzzAdmin_MFT1.0-vfs/toSSC 1109