Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2018 11:04:11

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Текст в словарь

Как превратить текст в словарь?

 a="Event: Newstate
Privilege: call,all
Channel: SIP/105-0007be79
ChannelState: 6
ChannelStateDesc: Up"

Надо получить словарь:
ab = { “Event” : “Newstate” ,
“Privilege” : “call,all” ,
“Channel” : “SIP/105-0007be79” ,
“ChannelState” : “6” ,
“ChannelStateDesc” : “Up”
}

Офлайн

#2 Фев. 26, 2018 11:47:33

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Текст в словарь

 a = '''Event: Newstate
Privilege: call,all
Channel: SIP/105-0007be79
ChannelState: 6
ChannelStateDesc: Up'''
dct = dict([i.split(':') for i in a.split('\n')])
print(dct)
{'Event': ' Newstate', 'Privilege': ' call,all', 'Channel': ' SIP/105-0007be79',
 'ChannelState': ' 6', 'ChannelStateDesc': ' Up'}

Офлайн

#3 Фев. 26, 2018 16:01:20

nick789
Зарегистрирован: 2016-09-21
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Текст в словарь

 dct=dict([i.split(': ') for i in a.split('\n')])
Event: RTCPSent
Privilege: reporting,all
To: 192.168.0.7:16429
OurSSRC: 722615561
SentNTP: 1319652944.0257110016
SentRTP: 110384776
SentPackets: 28241
SentOctets: 4518560
ReportBlock:
FractionLost: 0
CumulativeLoss: 0
IAJitter: 0.0001
TheirLastSR: 0
DLSR: 65517.7580 (sec)
Traceback (most recent call last):
  File "./test.py", line 59, in <module>
    dct=dict([i.split(': ') for i in mes1.split('\n')])
ValueError: dictionary update sequence element #8 has length 1; 2 is required

Вот не задача, похоже валится на ReportBlock:
не хватает второго аргумента.

Коды там такие: 3a a0 46

Что можно придумать ??

Второй аргумент если будет пустой - сойдет.

Отредактировано nick789 (Фев. 26, 2018 16:02:35)

Офлайн

#4 Фев. 26, 2018 16:32:59

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Текст в словарь

 a = '''
Event: RTCPSent
Privilege: reporting,all
To: 192.168.0.7:16429
OurSSRC: 722615561
SentNTP: 1319652944.0257110016
SentRTP: 110384776
SentPackets: 28241
SentOctets: 4518560
ReportBlock:
FractionLost: 0
CumulativeLoss: 0
IAJitter: 0.0001
TheirLastSR: 0
DLSR: 65517.7580 (sec)
'''
for i in a.split('\n'):
    if len(i) < 2 or not i:
        #print(i.split(': '))
        pass
    else:
        print(i.split(': '))

Офлайн

#5 Фев. 26, 2018 17:29:36

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

Текст в словарь

nick789
Как превратить текст в словарь?
 import yaml
#------------
b = """Event: RTCPSent
Privilege: reporting,all
To: 192.168.0.7:16429
OurSSRC: 722615561
SentNTP: 1319652944.0257110016
SentRTP: 110384776
SentPackets: 28241
SentOctets: 4518560
ReportBlock:
FractionLost: 0
CumulativeLoss: 0
IAJitter: 0.0001
TheirLastSR: 0
DLSR: 65517.7580 (sec)"""
#----------------
dct = yaml.load(b)

Отредактировано vrabey (Фев. 26, 2018 17:38:33)

Офлайн

#6 Фев. 26, 2018 17:30:03

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Текст в словарь

ну чего там ? не подходит чтоль?

 dct=dict([i.split(': ') for i in a.split('\n') if len(i.split(': ')) ==2])
print(dct)
{'Event': 'RTCPSent', 'Privilege': 'reporting,all', 'To': '192.168.0.7:16429', 'OurSSRC': '722615561', 'SentNTP': '1319652944.0257110016', 'SentRTP': '110384776', 'SentPackets': '28241', 'SentOctets': '4518560', 'FractionLost': '0', 'CumulativeLoss': '0', 'IAJitter': '0.0001', 'TheirLastSR': '0', 'DLSR': '65517.7580 (sec)'}

Отредактировано papuas (Фев. 26, 2018 17:33:34)

Офлайн

#7 Фев. 26, 2018 17:35:40

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Текст в словарь

валится тут To: 192.168.0.7:16429 потому как split(':') дает список из трех эл. а для создания словаря в том виде который описан выше требуются два (написан был исходя из преведенных выше даных)

 a = '''Event: RTCPSent
Privilege: reporting,all
To: 192.168.0.7:16429
OurSSRC: 722615561
SentNTP: 1319652944.0257110016
SentRTP: 110384776
SentPackets: 28241
SentOctets: 4518560
ReportBlock:
FractionLost: 0
CumulativeLoss: 0
IAJitter: 0.0001
TheirLastSR: 0
DLSR: 65517.7580 (sec)'''
def correct(i):
    res = i.split(':')
    if len(res) >2:
        return res[0],":".join(res[1:])
    return res
      
dct = dict([correct(i) for i in a.split('\n')])
print(dct)
{'Event': ‘ RTCPSent’, ‘Privilege’: ‘ reporting,all’, ‘To’: ‘ 192.168.0.7:16429’, ‘OurSSRC’: ‘ 722615561’, ‘SentNTP’: ‘ 1319652944.0257110016’, ‘SentRTP’: ‘ 110384776’, ‘SentPackets’: ‘ 28241’, ‘SentOctets’: ‘ 4518560’, ‘ReportBlock’: ‘', ’FractionLost': ‘ 0’, ‘CumulativeLoss’: ‘ 0’, ‘IAJitter’: ‘ 0.0001’, ‘TheirLastSR’: ‘ 0’, ‘DLSR’: ‘ 65517.7580 (sec)’}

Отредактировано marvellik (Фев. 26, 2018 17:38:10)

Офлайн

#8 Фев. 26, 2018 18:23:40

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Текст в словарь

 >>> a = '''Event: RTCPSent
Privilege: reporting,all
To: 192.168.0.7:16429
OurSSRC: 722615561
SentNTP: 1319652944.0257110016
SentRTP: 110384776
SentPackets: 28241
SentOctets: 4518560
ReportBlock:
FractionLost: 0
CumulativeLoss: 0
IAJitter: 0.0001
TheirLastSR: 0
DLSR: 65517.7580 (sec)'''
>>> d = {}
>>> for i in a.split('\n'):
	tmp = i.split(':')
	d[tmp[0]] = ':'.join(tmp[1:])
	
>>> d
{'Event': ' RTCPSent', 'Privilege': ' reporting,all', 'To': ' 192.168.0.7:16429', 'OurSSRC': ' 722615561', 'SentNTP': ' 1319652944.0257110016', 'SentRTP': ' 110384776', 'SentPackets': ' 28241', 'SentOctets': ' 4518560', 'ReportBlock': '', 'FractionLost': ' 0', 'CumulativeLoss': ' 0', 'IAJitter': ' 0.0001', 'TheirLastSR': ' 0', 'DLSR': ' 65517.7580 (sec)'}
>>> 

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version