Package: python-textops
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.InstallTo install:pip install python-textopsOverviewThe usual way to use textops is something like below. IMPORTANT : Note that textops library redefines
the pythonbitwise ORoperator ‘|’ 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" | myopsAn “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'}]ExamplesPiped then dotted notation (recommended):>>> print 'this is an error\nthis is a warning' | grepi('error').first().upper()
THIS IS AN ERRORYou 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 ERRORTo execute an operation directly from strings, lists or dictswith the dotted notation,
you must use textops Extended types :StrExt,ListExtorDictExt:>>> s = StrExt('this is an error\nthis is a warning')
>>> print s.grepi('error').first().upper()
THIS IS AN ERRORDocumentationPlease,read documentation here :News0.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 fixed0.3.1 (2017-04-05)Fixed bug when have empty string as piped input string0.3.0 (2017-03-23)add fileops and runops0.2.14 (2017-02-28)sed() and sedi() now accept list of patterns to search and list of replacement strings0.2.12 (2017-02-27)add tofile() and teefile()0.2.11 (2017-01-31)Remove version limitation over sphinx package in setup.py0.2.10 (2017-01-26)added textops.extend_type0.2.9 (2016-12-06)Fix autostrip in state_pattern() when no groupdictadd __continue__ for goto _state in state_pattern()parsek* and keyval now can parse list of strings0.2.8 (2016-11-02)fix MySQLdb does not support UnicodeExtcallable attribute starting with ‘_’ will not be extended anymore0.2.6 (2016-04-12)Improve out data path in state_pattern() op0.2.5 (2016-04-12)Add sgrep*() ops0.2.4 (2016-03-23)Add dostrip() opImprove sed() op0.2.3 (2016-03-17)Add wcount*() ops0.2.2 (2016-02-16)cut and cutre now accept maxsplit parameter0.2.1 (2016-02-16)add aggregate() list operation0.2.0 (2015-12-16)Better repr display in ipython0.1.9 (2015-12-15)Add eformatAdd context dict parameter for format and render operations0.1.8 (2015-12-10)Add less(), skess() list operationsAdd parse_smart() parser0.1.7 (2015-11-26)Add some operationsperf tunning0.1.3 (2015-11-20)Tune many thingsAll is now documented0.1.2 (2015-11-04)More docs and doctests0.1.1 (2015-11-04)First working package