Как добавить набор буквенно-цифрового содержимого в список с помощью Python?
У меня есть файл журнала с датой, временем, именем процесса и данными пакета в алфавитно-цифровом формате, разделенными пробелом.
Пример строки:
Date Time ProcessName ActivityName : 55 34 00 aa c9 00 11 45 55
Я написал регулярное выражение для анализа содержимого и получения данных пакета. Теперь я хочу, чтобы эти пакетные данные были сохранены в списке, чтобы я мог написать сценарий сравнения, чтобы сравнить его с новым списком. Я создал новый список и использовал append внутри цикла for для добавления каждого элемента данных пакета. Я ожидал увидеть мой список вроде ['55','34','00','c9','00','11','45','55], но я получаю ['5','','5','','3','','4','','0','','0' и т. Д.].
Для цикла я использовал:
for packs in match.group(6):
list.append(packs)
Как получить список со значением в нужном мне формате?
5 ответов
Использование re.findall
функция.
re.findall(r'(?<!\S)[A-Za-z\d]{2}(?!\S)', string)
Пример:
>>> s = "Date Time ProcessName ActivityName : 55 34 00 aa c9 00 11 45 55"
>>> re.findall(r'(?<!\S)[A-Za-z\d]{2}(?!\S)', s)
['55', '34', '00', 'aa', 'c9', '00', '11', '45', '55']
Объяснение:
(?<!\S)
Отрицательный взгляд за спиной утверждает, что совпадению не будет предшествовать непробельный символ.[a-z\d]{2}
Соответствует строчным буквам или цифрам ровно два раза.(?!\S)
Отрицательный взгляд утверждает, что за совпадением не последует непробельный символ.
Вы можете сделать это в каждой строке
line = "Date Time ProcessName ActivityName : 55 34 00 aa c9 00 11 45 55"
new_list = line.split(':')[1].split()
Просто измените свое старое регулярное выражение и добавьте [0].split()
чтобы получить результат, который вы хотите.
import re
x="Date Time ProcessName ActivityName : 55 34 00 aa c9 00 11 45 55"
print re.findall(r"(?<=:)\s*([\da-zA-Z]{2}(?:\s[\da-zA-Z]{2})*)",x)[0].split()
Выход:['55', '34', '00', 'aa', 'c9', '00', '11', '45', '55']
Попробуйте это. Это даст вам список того, что вы хотите.
Вам лучше использовать строку для сравнения. Вы можете использовать
...
list.append(...)
DATA=''.join(list)
Тогда вы получите строку вроде этого: '553400c90011...'
Итерация по строке даст один символ за раз. Сначала вам нужно разделить строку:
>>> data.split()
['55', '34', '00', 'aa', 'c9', '00', '11', '45', '55']
Вы также можете уточнить разделитель:
>>> data.split(' ')
['55', '34', '00', 'aa', 'c9', '00', '11', '45', '55']
Если вы хотите использовать регулярные выражения, смотрите ответ Avinash Raj. В противном случае получить число можно только с разбиением, если форма линии всегда одинакова:
>>> line.split(' : ')[1].split(' ')
['55', '34', '00', 'aa', 'c9', '00', '11', '45', '55']