Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2015 10:49:14

vzhyk
Зарегистрирован: 2015-11-03
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг TXT и экспорт в таблицу Excel

Здравствуйте!
Начал изучение языка для использования в рутинной работе. Но задача уже стоит, а знаний пока недостаточно
Прошу помочь с решением такой задачи. Есть txt файл.

SERVICE AREA DATA

SA NAME :XXXXXXXXX2 NUMBER :1064
SERVICE AREA IN MSS CONCEPT
LA NAME :LAC1234 LAC :1234
MOBILE COUNTRY CODE ………………..(MCC)… :123
MOBILE NETWORK CODE ………………..(MNC)… :01
SERVICE AREA CODE ………………….(SAC)… :98745
ADMINISTRATIVE STATE ……………………… :UNLOCKED



SERVICE AREA DATA

SA NAME :XXXXX1 NUMBER :1271
SERVICE AREA IN MSS CONCEPT
LA NAME :LAC9874 LAC :9874
MOBILE COUNTRY CODE ………………..(MCC)… :365
MOBILE NETWORK CODE ………………..(MNC)… :01
SERVICE AREA CODE ………………….(SAC)… :35467
ADMINISTRATIVE STATE ……………………… :UNLOCKED



SERVICE AREA DATA

SA NAME :XXXXXXXX NUMBER :1272
SERVICE AREA IN MSS CONCEPT
LA NAME :LAC777 LAC :777
MOBILE COUNTRY CODE ………………..(MCC)… :567
MOBILE NETWORK CODE ………………..(MNC)… :01
SERVICE AREA CODE ………………….(SAC)… :96758
ADMINISTRATIVE STATE ……………………… :LOCKED

Таких записей в текстовом файле - несколько сотен.
Необходимо отобрать определённые строки и организовать в таблицу Excel. Хотелось бы видеть такие столбцы:
| SA NAME | NUMBER | LA NAME | LAC | SAC | STATE | Current date-time|
| XXXXXXXXX | 1272 | LAC777 | 777 | 96758 | LOCKED | 03.11.15 - 10:00 |

Идеально будет, если список в экселе будет с закрепленной верхней строкой и включенной фильтрацией
Прошу подулиться опытных людей примром скрипта, а я бы почитал-поправил. Хочется учится на живых примерах.

Благодарю заранее!

Отредактировано vzhyk (Ноя. 4, 2015 10:49:48)

Прикреплённый файлы:
attachment Example.TXT (1,2 KБ)

Офлайн

#2 Ноя. 4, 2015 13:03:58

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Парсинг TXT и экспорт в таблицу Excel

Ну так показывайте что Вы уже наработали если нужна помощь или платите деньги и получите готовое решение ( желающих помочь тут много )

Офлайн

#3 Ноя. 4, 2015 13:08:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Парсинг TXT и экспорт в таблицу Excel

#!/usr/bin/env python3

import re
import datetime

pat = """\
SERVICE AREA DATA

SA NAME :(\S+) +NUMBER :(\S+)
SERVICE AREA IN MSS CONCEPT
LA NAME :(\S+) +LAC :(\S+)
MOBILE COUNTRY CODE ....................\(MCC\)... :\S+\s*
MOBILE NETWORK CODE ....................\(MNC\)... :\S+\s*
SERVICE AREA CODE ......................\(SAC\)... :(\S+)
ADMINISTRATIVE STATE ........................... :(\S+)"""

names = ['SA NAME', 'NUMBER', 'LA NAME',
'LAC', 'SAC', 'STATE', 'Current date-time']

def load_records(fname, pat):
with open(fname, encoding='utf-8') as fin:
text = fin.read()
out = re.findall(pat, text)
return out

def add_time(seq):
dt = datetime.datetime.now()
for i in seq:
yield i + ('{:%d.%m.%y - %H:%M}'.format(dt),)

def save_records(fname, names, seq):
header = format_line(names)
with open(fname, 'w', encoding='utf-8') as fout:
print(header, file=fout)
for i in map(format_line, seq):
print(i, file=fout)

def format_line(seq):
return '| {} |'.format(' | '.join(seq))

def main():
ifname = 'file.txt'
ofname = 'out.txt'
records = load_records(ifname, pat)
records_timed = add_time(records)
save_records(ofname, names, records_timed)

if __name__ == '__main__':
main()
Без подсветки, потому что там регулярное выражение содержит пустую строку (код с подсветкой её удалит, а пробел ставить в начале нельзя).

Вывод
| SA NAME | NUMBER | LA NAME | LAC | SAC | STATE | Current date-time |
| XXXXXXXXX | 568 | LAC9876 | 9876 | 66547 | UNLOCKED | 04.11.15 - 21:06 |
| XXXXXXXX1 | 4573 | LAC5436 | 5436 | 9812 | UNLOCKED | 04.11.15 - 21:06 |
| YYYYYYYY1 | 1069 | LAC143 | 143 | 32467 | LOCKED | 04.11.15 - 21:06 |



Отредактировано py.user.next (Ноя. 4, 2015 13:12:25)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version