2015-08-17 3 views
0

Im в настоящее время пытается проанализировать журнал Apache в формате, который я не могу сделать нормально. (Пробовали с использованием goaccess)Обработка разделителей с помощью python

В возвышенном виде это разделители отображаются как ENQ, SOH и ETX, которые тоже моими знаниями являются «|», пространство и надстрочный текст L. Я пытаюсь использовать re.split для разделения отдельных компонентов журнала, но я не уверен, как дело ж/верхний индекс L.

на возвышенной он показывает, как 3286d68255beaf010000543a000012f1/Madonna_Home_1.jpgENQx628a135bENQZ1e5ENQAB50632SOHA50.134.214.130SOHC98.138.19.91SOHD42857ENQwwww.newprophecy.net...

с ENQ годов как «|» и SOH as '', когда я открываю файл в текстовом редакторе (как и блокнот)

Мне просто нужно разобрать IP-адреса, чтобы остальная часть строки в основном неактуальна.

В настоящее время у меня есть

pkts = re.split("\s|\\|") 

Но я не знаю, что делать для L.

+3

Пример с ожидаемым выходом будет лучше. –

+1

Что случилось с копированием и вставкой индекса L в regex? –

+0

Просьба привести пример, например, образец Input и sample output. –

ответ

0

Те 3-буквенный коды Управляющие коды ASCII - это ASCII символы, которые происходят до 32 (символ пробела) в наборе символов ASCII. Вы можете найти a full list online.

Эти символы не соответствуют чему-либо пригодному для печати, поэтому вы ошибаетесь при условии, что они соответствуют этим символам. Вы можете ссылаться на них как на литералы на нескольких языках, используя нотацию \x00 - например, управляющий код ETX соответствует \x03 (см. Ссылку I, связанную с выше). Вы можете использовать их для разделения строк или чего-либо еще.

Это личный ответ на ваш вопрос, но все это в стороне. Я считаю маловероятным, чтобы вы на самом деле нужно разбить файл журнала Apache по кодам управления. Угадав, что на самом деле произошло, возможно, что некоторые символы Юникода каким-то образом закрались в ваш файл журнала, возможно, с кодировкой UTF-8. Кодировка представляет собой способ представления символов, которые выходят за пределы 255 одного байта, кодируя расширенные символы с несколькими байтами.

Существует несколько типов кодирования, но UTF-8 является одним из самых популярных. Если вы используете UTF-8, у него есть свойство, что стандартные символы ASCII будут отображаться как обычно (так что вы даже никогда не понимаете, что используется UTF-8), но если вы просматриваете файл в редакторе, который не является UTF-8 (или который неправильно идентифицирует файл как обычный ASCII), тогда вы увидите эти нечетные управляющие коды. Это места, где действительно код и характер (ы) до или после него должны интерпретироваться как единое целое.

Я не уверен, что это причина, это всего лишь образованная догадка, но если вы еще не подумали об этом, важно выяснить кодировку вашего файла, так как это повлияет на то, как вы интерпретируете всего его содержания. Я предлагаю загрузить файл в редактор, который понимает кодировки (я уверен, что что-то столь же популярное, как Sublime, с надлежащей конфигурацией) и принудительно кодирует UTF-8 и видит, делает ли это контент более разумным.

+0

Так что все равно обрабатывать их как строки? Когда я пытаюсь читать в python, он дает e ошибку «codecs.charmap_decode (input, self.errors, decoding_table) [0] UnicodeDecodeError: кодек« charmap »не может декодировать байты 0x90« Это означает, что кодировка не указана, но Раньше я открывал файл, поэтому я потерялся за то, что мне нужно сделать. –

+0

'0x90' звучит как байт продолжения UTF-8 для меня. Эта ошибка означает, что используется кодировка charmap, я думаю, из какого исходного файла возникает ошибка? Например, 'cp1252.py' является обычным преступником в Windows. Исходный файл, вероятно, скажет вам, какая кодировка используется. Если вы хотите попробовать UTF-8, откройте файл следующим образом: 'fd = open (filename, encoding =" utf8 ")' – Cartroo

+0

(Если вы используете Python 2, используйте ['codecs.open()'] (https : //docs.python.org/2/library/codecs.html#codecs.open)). – Cartroo

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