У меня есть несколько очень больших не совсем файлов журнала csv.Разбор большого файла журнала pseudo csv в Python
С учетом следующих условий:
- поля значение имеют неэкранированные строки и запятые, почти все, что может быть в поле значения, включая «=»
- каждая веская линия имеет неизвестное количество допустимых полей значений
- допустимого значения выглядит
key=value
таким образом, что действительная линия выглядит какkey1=value1, key2=value2, key3=value3
и т.д. - начала каждой действительной линии должна начинаться с
eventId=<some number>,
Каков наилучший способ для чтения файла, разбить файл на правильные строки и затем проанализировать каждую строку в правильные пары значений ключа?
Я попытался
file_name = 'file.txt'
read_file = open(file_name, 'r').read().split(',\neventId')
Это правильно разбирает первую запись, но все остальные записи начинается с =#
вместо eventId=#
. Есть ли способ сохранить разделитель и разделить на действительную строку новой строки?
Кроме того, скорость очень важна.
Пример данных:
eventId=123, key=value, key2=value2:
this, will, be, a problem,
maybe?=,
anotherkey=anothervalue,
eventId=1234, key1=value1, key2=value2, key3=value3,
eventId=12345, key1=
msg= {this is not a valid key value pair}, key=value, key21=value=,
Да файл на самом деле это неаккуратно (иногда) каждое событие здесь имеет 3 пары ключ-значение, хотя в действительности существует неизвестное число пар ключ-значение в каждом случае.
Я бы начал с разбивки на записи с использованием свойства 4. Например, разбить на eveyr экземпляр 'eventid = \ d +'. Оттуда это просто вопрос разделения с использованием регулярного выражения, которое соответствует « = », в словаре. –
CollinD
Я пытаюсь использовать свойство 4, чтобы разделить строки на чтение, но так, как я сейчас делаю это, удаляет разделитель. – deltap
Поскольку разделитель статичен, вы всегда можете просто добавить его обратно.Я не очень хорошо знаком с Python, поэтому я не могу предоставить там тонну помощи, извините. – CollinD