<commit_before>=====
CfbIO
=====

.. image:: https://api.travis-ci.org/rembish/cfb.png

CfbIO provides access to internal structure of Microsoft Compound File Binary
File Format, also known as OLE2 or COM.

Module operates with input file like standard IO module in Python. You can seek,
read and maybe one day write those files, like all other file-like objects. Also
module grants access to internal directory structure containing Entries, which
are also standard readable/seekable objects.

So, your work with this module is very simple::

    from cfb import CfbIO
    from cfb.directory.entry import SEEK_END

    doc = CfbIO("something.doc")

    root = doc.root
    print(root.read())  # Read whole root entry buffer

    some_entry = doc.directory[1].left
    some_entry.seek(100, whence=SEEK_END)
    print(some_entry.read(100))  # Read last 100 bytes from left sibling

All classes are lazy, so you can read really big files without memory leaks.
All data will be read only, when you will want it.<commit_msg>Travis CI badge to test results<commit_after>===================
CfbIO |TravisLink|_
===================

.. |TravisLink| image:: https://api.travis-ci.org/rembish/cfb.png
.. _TravisLink: https://travis-ci.org/rembish/cfb

CfbIO provides access to internal structure of Microsoft Compound File Binary
File Format, also known as OLE2 or COM.

Module operates with input file like standard IO module in Python. You can seek,
read and maybe one day write those files, like all other file-like objects. Also
module grants access to internal directory structure containing Entries, which
are also standard readable/seekable objects.

So, your work with this module is very simple::

    from cfb import CfbIO
    from cfb.directory.entry import SEEK_END

    doc = CfbIO("something.doc")

    root = doc.root
    print(root.read())  # Read whole root entry buffer

    some_entry = doc.directory[1].left
    some_entry.seek(100, whence=SEEK_END)
    print(some_entry.read(100))  # Read last 100 bytes from left sibling

All classes are lazy, so you can read really big files without memory leaks.
All data will be read only, when you will want it.
{'fraction_non_alphanumeric': 0.08884775566867191, 'fraction_numerical': 0.01018047200370199, 'mean_word_length': 4.016241299303944, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1002264', 'n_tokens_mistral': 641, 'n_tokens_neox': 604, 'n_words': 268}