Найти - Пользователи
Полная версия: вырезание строки
Начало » Python для новичков » вырезание строки
1
sprite
Добрый день.

Я опрашиваю коммутатор по телнету и получаю большую строку, которую могу поделить на строки и получить список строк. Критерием деления является 2 символа \n\r и split('\n\r') замечательно делит мне строки. Но в некоторых случаях коммутатором выдается строка начинающаяся с ескейп-последовательности \x1b и содержащая ее несколько раз. Как мне вырезать всю это строку? Подскажите пож-ста!
PooH
lstrip('\x1b')
sprite
PooH
lstrip('\x1b')
Неподходит, мне не символ в начале строки вырезать надо, а всю строку от символа \x1b до символов \n\r. Причем символов \x1b в этой строке может быть несколько.
Может я несовсем правильно объяснил ситуацию. У меня есть переменная string, очень большая, она содержит текст состоящий из форматированных строк, с признаком конца \n\r. Методом split я могу поделить эту строку на список строк, и дальше обрабатывать элементы этого массива как обычные строки. Но так-как в моей первоначальной строке содержится текст с эскейп последовательностями, полученный таким образом массив строк обрабатывается некорректно. Мне надо либо выкинуть эту строку из массива, как элемент списка, либо из первоначальной строки удалить текст форматированной строки содержащий символы эскейп последовательности (все что я о нем знаю, этот фрагмент текста начинается на \x1b и заканчивается на \n\r) и потом уже пользовать метод split. Как это сделать не могу придумать.
Syao
sprite
PooH
lstrip('\x1b')
Неподходит, мне не символ в начале строки вырезать надо, а всю строку от символа \x1b до символов \n\r. Причем символов \x1b в этой строке может быть несколько.
Может я несовсем правильно объяснил ситуацию. У меня есть переменная string, очень большая, она содержит текст состоящий из форматированных строк, с признаком конца \n\r. Методом split я могу поделить эту строку на список строк, и дальше обрабатывать элементы этого массива как обычные строки. Но так-как в моей первоначальной строке содержится текст с эскейп последовательностями, полученный таким образом массив строк обрабатывается некорректно. Мне надо либо выкинуть эту строку из массива, как элемент списка, либо из первоначальной строки удалить текст форматированной строки содержащий символы эскейп последовательности (все что я о нем знаю, этот фрагмент текста начинается на \x1b и заканчивается на \n\r) и потом уже пользовать метод split. Как это сделать не могу придумать.
[i for i in string.split('\n\r') if '\x1b' not in i]
sprite
Syao
[i for i in string.split('\n\r') if '\x1b' not in i]
Решил проблему проще strOut = re.sub(r“\x1b.*\n\r”, r'', strOut)
denz
sprite
Решил проблему проще strOut = re.sub(r“\x1b.*\n\r”, r'', strOut)
а почему просто не
[s.strip() for s in strOut.replace(chr(27), '').split('\r\n')]
побыстрее чем регекспами будет …
sprite
denz
sprite
Решил проблему проще strOut = re.sub(r“\x1b.*\n\r”, r'', strOut)
а почему просто не
[s.strip() for s in strOut.replace(chr(27), '').split('\r\n')]
побыстрее чем регекспами будет …
Может и быстрее, попробую ваш рецепт обязательно. НО в моем случает не просто символ нужно выреазть, а всю строку в которой он содержится.
Спасибо за совет.
pochechyev
самый просто вариант (в лоб)
for my_str in str_list: 
if "\x1b" in my_str:
str_list.remove(my_str)
str_list - список строк который вы полчили парсингом “большой строки” с коммутатора

так будет быстрее:

for i in xrange(len(str_list)): 
if "\x1b" in str_list(i):
str_list.pop(i)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB