@dimorexa

Как читать данные в таблице xlsx? построчно форматировать данные вставляя в столбцы?

Имеется массив данных построчно (каждый в одной ячейке в начале строки) в таблице name.xlsx вида:

15:32:50> 19-10-08 14:48:58
15:32:50> Flow 0 m3/h
15:32:50> POS: +4x m
15:32:50>
15:33:03> 19-10-08 14:49:58
15:33:03> Flow 0 m3/h
15:33:03> POS: +4x m
15:33:03>
15:33:16> 19-10-08 14:50:58
15:33:16> Flow 0 m3/h
15:33:16> POS: +6x m
15:33:16>

требуется разбить данные по 3-ем столбцам и сохранить в этот же файл(в новом листе) чтобы получилось:

1столбец 2столбец 3столбец
19.10.08 14:48:58 0 4
19.10.08 14:49:58 0 4
19.10.08 14:50:58 0 6
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
@o5a
Я бы наверное сгруппировал все данные по дате лога, а потом распарсил значения через regexp (если они фиксированы, можно и жестко по индексу). Примерно так
import openpyxl
import re

wb = openpyxl.load_workbook('name.xlsx')
sheet = wb.active

log = dict()
# перебираем ячейки 1-го столбца и группируем по времени лога
for c in sheet['A']:
    key = c.value[:8]
    val = c.value[10:]
    log[key] = log.get(key,'') + val

rc = re.compile(r"(\d+-\d+-\d+) (\d+:\d+:\d+).*?Flow (\d+).*?POS:.*?(\d+)")
new_data = []
for key, val in log.items():
    m = rc.search(val)
    if m:
        new_data.append(m.groups())

# наши разбитые данные
print('new data:', new_data)

# и записываем результат на новый лист (для простоты через добавление новых строк)
sheet = wb['Sheet2']
for row in new_data:
    sheet.append(row)
wb.save('name.xlsx')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
jon_guitarist
@jon_guitarist
Как вариант - Разбить текст по столбцам. Сначала разделитель >
потом разделитель ПРОБЕЛ

Далее просто удалить столбцы ненужные со сдвигом влево. Это, чтобы подтянуть 0 4
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы