Панды: загружать записи, которые занимают несколько строк - PullRequest
0 голосов
/ 05 июля 2018

Я ищу стандартный питонский способ загрузки двух общих шаблонов в файлах журналов в фрейм данных pandas.

Записи, занимающие несколько строк:

=REPORT==== 26-Jun-2018::18:30:00 ===
    column_1: some data
    column_2: {'maybe': 'json or something'}

=REPORT==== 26-Jun-2018::19:30:00 ===
    column_1: some data
    column_2: {'maybe': 'json or something',
               'and': 'maybe spanning multiple lines'}

Записи, которые могут занимать несколько строк:

2018-01-09 20:12:38,020 INFO logname: Examining 6668121 database
2018-01-09 20:13:00,020 ERROR logname: Caught an Exception
    Traceback (most recent call last):
    File "test.py", line 1, in __main__
        None.do_the_thing()
    AttributeError: 'NoneType' object has no attribute 'getDatabase'

Для первого примера я ожидаю получить кадр данных со столбцами, такими как ['timestamp', 'column_1', 'column_2']

Для второго, ['timestamp', 'log_level', 'logname', 'message message]]

Я вполне уверен, что есть способ обозначать разделители для каждой записи, кроме как только конец каждой строки, и внутренние разделители для каждой записи.

1 Ответ

0 голосов
/ 05 июля 2018

Я не думаю, что у панд действительно есть готовый способ выполнить то, что вы хотите.

Вот доступные методы для чтения в фреймах данных из Doc on pandas методов ввода / вывода :

Format Type   Data Description    Reader      Writer
text          CSV                 read_csv    to_csv
text          JSON                read_json   to_json
text          HTML                read_html   to_html
text          Local clipboard     read_clipboard  to_clipboard
binary        MS Excel            read_excel  to_excel
binary        HDF5 Format         read_hdf    to_hdf
binary        Feather Format      read_feather    to_feather
binary        Parquet Format      read_parquet    to_parquet
binary        Msgpack             read_msgpack    to_msgpack
binary        Stata               read_stata      to_stata
binary        SAS                 read_sas     
binary        Python Pickle Format    read_pickle to_pickle
SQL           SQL                 read_sql    to_sql
SQL           Google Big Query    read_gbq    to_gbq

Оба ваших примера не следуют правилам текстовых форматов: csv, html или json - они являются ошибкой нескольких форматов. И чтобы сделать вещи более сложными, и ваши разделители элементов и разделители строк варьируются от строки к строке.

Из документа read_csv :

Если вам нужен сложный разделитель столбцов с использованием регулярных выражений, то это заставляет панд использовать движок python:

sep: str, по умолчанию ‘,’

Разделитель для использования. [...] Кроме того, разделители длиннее, чем 1 символ, отличный от '\ s +', будет интерпретироваться как обычный выражения, а также заставит использовать механизм синтаксического анализа Python. Обратите внимание, что разделители регулярных выражений склонны игнорировать данные в кавычках. Regex пример: '\ r \ t'

Принимая во внимание, что lineterminator arg может использоваться только с анализатором C и, кроме того, не может быть регулярным выражением:

lineterminator: str (длина 1), по умолчанию нет

Символ для разбиения файла на строки. Действует только с C-парсером.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...