Metadata-Version: 2.0
Name: python-textops
Version: 0.3.6
Summary: Python text operations module
Home-page: https://github.com/elapouya/python-textops
Author: Eric Lapouyade
Author-email: elapouya@gmail.com
License: LGPL 2.1
Keywords: textops
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 2.6
Requires-Dist: Sphinx
Requires-Dist: sphinxcontrib-napoleon
Requires-Dist: addicted
Requires-Dist: python-dateutil
Requires-Dist: python-slugify

===============
Getting started
===============

| python-textops provides many text operations at string level, list level or whole text level.
| These operations can be chained with a 'dotted' or 'piped' notation.
| Chained operations are stored into a single lazy object, they will be executed only when an input text will be provided.

Install
-------

To install::

    pip install python-textops

Overview
--------

The usual way to use textops is something like below. IMPORTANT : Note that textops library redefines
the python **bitwise OR** operator '|' in order to use it as a 'pipe' like in a Unix shell::

   from textops import *

   result = "an input text" | my().chained().operations()

   or

   for result_item in "an input text" | my().chained().operations():
      do_something(result_item)

   or

   myops = my().chained().operations()
   # and later in the code, use them :
   result = myops("an input text")
   or
   result = "an input text" | myops

An "input text" can be :

   * a simple string,
   * a multi-line string (one string having newlines),
   * a list of strings,
   * a strings generator,
   * a list of lists (useful when you cut lines into columns),
   * a list of dicts (useful when you parse a line).

So one can do::

   >>> 'line1line2line3' | grep('2').tolist()
   ['line1line2line3']
   >>> 'line1\nline2\nline3' | grep('2').tolist()
   ['line2']
   >>> ['line1','line2','line3'] | grep('2').tolist()
   ['line2']
   >>> [['line','1'],['line','2'],['line','3']] | grep('2').tolist()
   [['line', '2']]
   >>> [{'line':1},{'line':'2'},{'line':3}] | grep('2').tolist()
   [{'line': '2'}]

Examples
--------

Piped then dotted notation (recommended)::

   >>> print 'this is an error\nthis is a warning' | grepi('error').first().upper()
   THIS IS AN ERROR

You could use the pipe everywhere (internally a little less optimized, but looks like shell)::

   >>> print 'this is an error\nthis is a warning' | grepi('error') | first() | strop.upper()
   THIS IS AN ERROR

To execute an operation directly from strings, lists or dicts *with the dotted notation*,
you must use textops Extended types : ``StrExt``, ``ListExt`` or ``DictExt``::

   >>> s = StrExt('this is an error\nthis is a warning')
   >>> print s.grepi('error').first().upper()
   THIS IS AN ERROR

Documentation
-------------

Please, `read documentation here : <http://python-textops.readthedocs.org>`_

News
====

0.3.6 (2019-010-01)
-------------------
* add separators argument to parse_smart()

0.3.5 (2019-09-25)
------------------
* add key_filter argument to parse_smart()

0.3.4 (2018-05-25)
------------------
* add since() and until()

0.3.3 (2018-02-23)
------------------
* Fix get_attribute_or_textop()

0.3.2 (2017-06-18)
------------------
* DebugText class fixed

0.3.1 (2017-04-05)
------------------
* Fixed bug when have empty string as piped input string

0.3.0 (2017-03-23)
------------------
* add fileops and runops

0.2.14 (2017-02-28)
-------------------
* sed() and sedi() now accept list of patterns to search and list of replacement strings

0.2.12 (2017-02-27)
-------------------
* add tofile() and teefile()

0.2.11 (2017-01-31)
-------------------
* Remove version limitation over sphinx package in setup.py

0.2.10 (2017-01-26)
-------------------
* added textops.extend_type

0.2.9 (2016-12-06)
------------------

* Fix autostrip in state_pattern() when no groupdict
* add __continue__ for goto _state in state_pattern()
* parsek* and keyval now can parse list of strings

0.2.8 (2016-11-02)
------------------

* fix MySQLdb does not support UnicodeExt
* callable attribute starting with '_' will not be extended anymore

0.2.6 (2016-04-12)
------------------

* Improve out data path in state_pattern() op

0.2.5 (2016-04-12)
------------------

* Add sgrep*() ops

0.2.4 (2016-03-23)
------------------

* Add dostrip() op
* Improve sed() op

0.2.3 (2016-03-17)
------------------

* Add wcount*() ops

0.2.2 (2016-02-16)
------------------

* cut and cutre now accept maxsplit parameter

0.2.1 (2016-02-16)
------------------

* add aggregate() list operation

0.2.0 (2015-12-16)
------------------

* Better repr display in ipython

0.1.9 (2015-12-15)
------------------

* Add eformat
* Add context dict parameter for format and render operations

0.1.8 (2015-12-10)
------------------

* Add less(), skess() list operations
* Add parse_smart() parser

0.1.7 (2015-11-26)
------------------

* Add some operations
* perf tunning

0.1.3 (2015-11-20)
------------------

* Tune many things
* All is now documented

0.1.2 (2015-11-04)
------------------

* More docs and doctests

0.1.1 (2015-11-04)
------------------
First working package


