Форум сайта python.su
0
Как превратить текст в словарь?
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”
}
Офлайн
73
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'}
Офлайн
0
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
Отредактировано nick789 (Фев. 26, 2018 16:02:35)
Офлайн
6
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(': '))
Офлайн
23
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
ну чего там ? не подходит чтоль?
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)
Офлайн
73
валится тут 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)
Отредактировано marvellik (Фев. 26, 2018 17:38:10)
Офлайн
>>> 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)'} >>>
Офлайн