Разделение строк в зависимости от конкретной точности разделителей Python - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть текстовый файл, который я должен разделить в соответствии с определенным шаблоном разделителей.

Например:

Первый сплит должен быть после "" (или chr (32)) Второй сплит в той же строке должен быть "" (или дважды chr (32)) и тд.

Ниже приведен пример строки, которую я хочу разделить:

'2018-12-14 23:54:53,105 WARN  system.equipment - Timed AC is: 110.375\n'

Я нашел шаблон и в соответствии с ним хочу разделить и установить егов ASCII как массив.Пытался перебрать на расщепление, но безуспешно.Спасибо всем за вашу помощь и время !!!

delim_array = []
delim_array = [chr(32),chr(32),[chr(32)+chr(32)],[chr(32)+chr(45)+chr(32)]]
for j in delim_array:
    part = re.split(j,datafile[1])    #datafile is my list to split
    print (part)

Я бы хотел разделить список на разделители между частями в соответствии с delim_array:

1) '2018-12-14

2) 23: 54: 53,105

3) ПРЕДУПРЕЖДЕНИЕ

4) system.equipment

5) Синхронизированный AC составляет: 110,375

Но получается список, который разбивается только по первому разделителю в массиве.

1 Ответ

0 голосов
/ 05 февраля 2019

Вы были близки.Этот пример будет делать то, что вам нужно.

import re

dd = '2018-12-14 23:54:53,105 WARN  system.equipment - Timed AC is: 110.375\n'

delim_array = [chr(32),chr(32), chr(32)+chr(32), chr(32)+chr(45)+chr(32)]
part = []
for j in delim_array:
    ap, dd = re.split(j, dd, maxsplit=1)
    part.append(ap)    #datafile is my list to split

part.append(dd.strip())
print(part)

Это печатает: ['2018-12-14', '23:54:53,105', 'WARN', 'system.equipment', 'Timed AC is: 110.375']

Ключевая часть здесь, чтобы использовать re.split() с maxsplit, равным 1 ( здесь документы), поэтому каждую итерацию вы разбиваете на две части.Первая часть - это то, что вы хотите добавить в список part, вторая часть, которую вы оставляете для дальнейшего разделения.Итак, пересылаем вторую часть в ту же переменную, которая содержит строку (dd в моем примере).Не забудьте после цикла добавить последний полученный dd, иначе он будет потерян (я также уберу здесь новую строку).

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

import re

delim_array = [chr(32),chr(32), chr(32)+chr(32), chr(32)+chr(45)+chr(32)]
with open("your_file_name.txt") as datafile:
    for dd in datafile:
        part = []
        for j in delim_array:
            ap, dd = re.split(j, dd, maxsplit=1)
            part.append(ap)    #datafile is my list to split

        part.append(dd.strip())
        print(part)
...