Metadata-Version: 2.1
Name: pyin
Version: 0.5.4
Summary: It's like sed, but Python!
Home-page: https://github.com/geowurster/pyin
Author: Kevin Wurster
Author-email: wursterk@gmail.com
License: MIT
Description: ====
        pyin
        ====
        
        It's like sed, but Python!
        
        .. image:: https://travis-ci.org/geowurster/pyin.svg?branch=master
            :target: https://travis-ci.org/geowurster/pyin
        
        .. image:: https://coveralls.io/repos/geowurster/pyin/badge.svg?branch=master
            :target: https://coveralls.io/r/geowurster/pyin?branch=master
        
        
        Why?
        ====
        
        There are plenty of Unix tools, like ``sed`` and ``awk`` for processing text
        data from stdin or a file on disk, but the syntax can be unfriendly and
        sometimes its just easier to write a really simple script with a for loop
        and some if statements.  This project seeks to drop you in the middle of that
        for loop and let you write your own Python expressions to quickly get the job
        done without actually writing a script, handle I/O, etc.
        
        
        Command Line Interface
        ======================
        
        This project is intended to be used from the included utility ``pyin``, although
        the underlying ``pyin.core.pmap()`` function could be used elsewhere with
        non-string objects.
        
        .. code-block:: console
        
            Usage: pyin [OPTIONS] EXPRESSIONS...
        
              It's like sed, but Python!
        
              Map Python expressions across lines of text.  If an expression evaluates as
              'False' or 'None' then the current line is thrown away.  If an expression
              evaluates as 'True' then the next expression is evaluated.  If a list or
              dictionary is encountered it is JSON encoded.  All other objects are cast
              to string.
        
              Newline characters are stripped from the end of each line before processing
              and are added on write unless disabled with '--no-newline'.
        
              This utility employs 'eval()' internally but uses a limited scope to help
              prevent accidental side effects, but there are plenty of ways to get around
              this so don't pass anything through pyin that you wouldn't pass through
              'eval()'.
        
              Remove lines that do not contain a specific word:
        
                  $ cat INFILE | pyin "'word' in line"
        
              Capitalize lines containing a specific word:
        
                  $ cat INFILE | pyin "line.upper() if 'word' in line else line"
        
              Only print every other word from lines that contain a specific word:
        
                  $ cat INFILE | pyin \
                  > "'word' in line" \      # Get lines with 'word' in them
                  > "line.split()[::2])" \  # Grab every other word
                  > "' '.join(line)"         # Convert list from previous expr to str
        
              Process all input text as though it was a single line to replace carriage
              returns with the system newline character:
        
                  $ cat INFILE | pyin --block \
                  > "line.replace('\r\n', os.newline)"
        
              For a more in-depth explanation about exactly what's going on under the
              hood, see the the docstring in 'pyin.core.pmap()':
        
                  $ python -c "help('pyin.core.pmap')"
        
            Options:
              --version           Show the version and exit.
              -i, --infile PATH   Input text file. [default: stdin]
              -o, --outfile PATH  Output text file. [default: stdout]
              --block             Operate on all input text as though it was a single
                                  line.
              --no-newline        Don't ensure each line ends with a newline character.
              --help              Show this message and exit.
        
        
        Installing
        ==========
        
        Via pip:
        
        .. code-block:: console
        
            $ pip install pyin
        
        From master branch:
        
        .. code-block:: console
        
            $ git clone https://github.com/geowurster/pyin
            $ cd pyin && python setup.py install
        
        
        What about `py -x <https://github.com/Russell91/pythonpy>`_?
        ============================================================
        
        Most of this project was written with very little knowledge of ``py`` and no
        knowledge of ``py -x``, which serves almost exactly the same purpose.  The
        primary difference between the two projects is that ``pyin`` requires I/O and
        has some smarter filtering for expressions that evaluate as ``True`` or
        ``False``.
        
        
        Developing
        ==========
        
        Install:
        
        .. code-block:: console
        
            $ git clone https://github.com/geowurster/pyin
            $ cd pyin
            $ virtualenv venv && source venv/bin/activate
            $ pip install -e .\[dev\]
            $ py.test tests --cov pyin --cov-report term-missing
        
        
        License
        =======
        
        See ``LICENSE.txt``
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Topic :: Text Processing :: Filters
Classifier: Topic :: Text Processing :: General
Classifier: Topic :: Utilities
Provides-Extra: dev
