N
name
Hi,
I try to parse a file with pyparsing and get this output:
['generic', 'host-01', 'host alias xyz', '10.0.0.1']
- alias: host alias xyz
- host_name: ['host-01']
- ip_address: ['10.0.0.1']
- use: ['generic']
<Hosts>
<ITEM>generic</ITEM>
<host_name>host-01</host_name>
<alias>host alias xyz</alias>
<ip_address>10.0.0.1</ip_address>
</Hosts>
['generic', 'host-01', 'host alias xyz', '10.0.0.1']
finished
What I don't understand is why I get the line
<ITEM>generic</ITEM>
and not
<use>generic</use>
as there is an associated name in the dump() output.
Thank you very much in advance for any clue or help you could
provide.
The code:
---------
#!/usr/bin/env python
from pyparsing import *
sample = """
define host{
use generic
host_name host-01
alias host alias xyz
address 10.0.0.1
}
"""
# define tokens
LBRACE,RBRACE = map(Suppress, '{}')
ipAddress = Combine(Word(nums) + ('.' + Word(nums))*3)
useTemplate = oneOf('generic user')
# define grammar
deviceName = Word(alphanums+'-')
hostDef = Literal('define').suppress() + Literal('host').suppress()
useLine = Suppress('use') + useTemplate + Suppress(SkipTo(lineEnd))
host_nameLine = Suppress('host_name') + deviceName + Suppress(SkipTo
(lineEnd))
aliasLine = Suppress('alias') + SkipTo(lineEnd)
aliasLine.setParseAction(lambda x: ' '.join(x[0].split()))
ip_addressLine = Suppress('address') + ipAddress
use = useLine.setResultsName('use')
host_name = host_nameLine.setResultsName('host_name')
alias = aliasLine.setResultsName('alias')
ip_address = ip_addressLine.setResultsName('ip_address')
host_stmt = (use + host_name + alias + ip_address)
host = hostDef + LBRACE + host_stmt + RBRACE
test_file = OneOrMore(host) + stringEnd
# test
x = test_file.parseString(sample)
print x.dump()
print
print x.asXML('Hosts')
print
print x.asList()
print
print 'finished'
I try to parse a file with pyparsing and get this output:
['generic', 'host-01', 'host alias xyz', '10.0.0.1']
- alias: host alias xyz
- host_name: ['host-01']
- ip_address: ['10.0.0.1']
- use: ['generic']
<Hosts>
<ITEM>generic</ITEM>
<host_name>host-01</host_name>
<alias>host alias xyz</alias>
<ip_address>10.0.0.1</ip_address>
</Hosts>
['generic', 'host-01', 'host alias xyz', '10.0.0.1']
finished
What I don't understand is why I get the line
<ITEM>generic</ITEM>
and not
<use>generic</use>
as there is an associated name in the dump() output.
Thank you very much in advance for any clue or help you could
provide.
The code:
---------
#!/usr/bin/env python
from pyparsing import *
sample = """
define host{
use generic
host_name host-01
alias host alias xyz
address 10.0.0.1
}
"""
# define tokens
LBRACE,RBRACE = map(Suppress, '{}')
ipAddress = Combine(Word(nums) + ('.' + Word(nums))*3)
useTemplate = oneOf('generic user')
# define grammar
deviceName = Word(alphanums+'-')
hostDef = Literal('define').suppress() + Literal('host').suppress()
useLine = Suppress('use') + useTemplate + Suppress(SkipTo(lineEnd))
host_nameLine = Suppress('host_name') + deviceName + Suppress(SkipTo
(lineEnd))
aliasLine = Suppress('alias') + SkipTo(lineEnd)
aliasLine.setParseAction(lambda x: ' '.join(x[0].split()))
ip_addressLine = Suppress('address') + ipAddress
use = useLine.setResultsName('use')
host_name = host_nameLine.setResultsName('host_name')
alias = aliasLine.setResultsName('alias')
ip_address = ip_addressLine.setResultsName('ip_address')
host_stmt = (use + host_name + alias + ip_address)
host = hostDef + LBRACE + host_stmt + RBRACE
test_file = OneOrMore(host) + stringEnd
# test
x = test_file.parseString(sample)
print x.dump()
print x.asXML('Hosts')
print x.asList()
print 'finished'