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)