Create a parser (high-level)

Example with function createParser():

from hachoir_core.cmd_line import unicodeFilename
from hachoir_parser import createParser
from sys import argv, stderr, exit

if len(argv) != 2:
    print >>stderr, "usage: %s filename" % argv[0]
    exit(1)
filename = argv[1]
filename, realname = unicodeFilename(filename), filename
parser = createParser(filename)
if not parser:
    print >>stderr, "Unable to parse file"
    exit(1)
for field in parser:
    print "%s: %s (size=%s bits)" % (field.absolute_address, field.name, field.size)

Result with log_kubuntu.png:

0: id (size=64 bits)
64: header (size=200 bits)
264: background (size=144 bits)
408: physical (size=168 bits)
576: time (size=152 bits)
728: data[0] (size=65632 bits)
66360: data[1] (size=13720 bits)
80080: end (size=96 bits)

Create a parser (low-level)

Create a stream with FileInputStream class and a parser with PngFile class:

from hachoir_core.cmd_line import unicodeFilename
from hachoir_core.stream import FileInputStream
from hachoir_parser.image.png import PngFile
from sys import argv, stderr, exit

if len(argv) != 2:
    print >>stderr, "usage: %s filename" % argv[0]
    exit(1)
filename = argv[1]
filename, realname = unicodeFilename(filename), filename
stream = FileInputStream(filename, realname)
parser = PngFile(stream)
if not parser:
    print >>stderr, "Unable to parse file"
    exit(1)
for field in parser:
    print "%s: %s (size=%s bits)" % (field.absolute_address, field.name, field.size)

Result with log_kubuntu.png:

0: id (size=64 bits)
64: header (size=200 bits)
264: background (size=144 bits)
408: physical (size=168 bits)
576: time (size=152 bits)
728: data[0] (size=65632 bits)
66360: data[1] (size=13720 bits)
80080: end (size=96 bits)

Parser methods and attributes

See hachoir-core API documentation.