Найти - Пользователи
Полная версия: Текст в словарь
Начало » Python для новичков » Текст в словарь
1
nick789
Как превратить текст в словарь?

 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”
}
marvellik
 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'}
nick789
 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

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

Второй аргумент если будет пустой - сойдет.
papuas
 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(': '))

vrabey
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)
papuas
ну чего там ? не подходит чтоль?
 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)'}
marvellik
валится тут 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)’}
vic57
 >>> 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)'}
>>> 
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB