{ "info": { "author": "Stefan Fischer", "author_email": "sfischer13@ymail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: General" ], "description": "Python Separator Separated Values Package\n=========================================\n\n.. image:: https://img.shields.io/pypi/v/ssv.svg\n :target: https://pypi.python.org/pypi/ssv\n\n.. image:: https://img.shields.io/travis/sfischer13/python-ssv.svg\n :target: https://travis-ci.org/sfischer13/python-ssv\n\nSummary\n-------\n\nSSV stands for separator-separated values. It sounds like a joke, but it can actually be useful.\n\nDescription\n-----------\n\nSSV is a format for saving tabular data (`flat-file databases`__) as `delimiter-separated values`__ in a plain text file. In contrast to other formats, e.g. `CSV`__ or `TSV`__, `delimiter collision`__ is virtually impossible. Instead of using commas (CSV), tabs (TSV) and newlines, SSV relies on the record separator ``RS`` and the unit separator ``US`` for `data structuring`__, which should not occur at all in textual data.\n\n__ https://en.wikipedia.org/wiki/Flat_file_database\n__ https://en.wikipedia.org/wiki/Delimiter-separated_values\n__ https://en.wikipedia.org/wiki/Comma-separated_values\n__ https://en.wikipedia.org/wiki/Tab-separated_values\n__ https://en.wikipedia.org/wiki/Delimiter#Delimiter_collision\n__ https://en.wikipedia.org/wiki/Control_character#Data_structuring\n\nThe format is an example of `ASCII delimited text`__. As there is no official standard, SSV makes decisions that might be considered controversial. In general, simplicity and ease of implementation are preferred to other considerations. For example, SSV does not support escaping of ``RS`` and ``US``.\n\n__ https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\n\nFormat\n------\n\nSSV files can be formally described by the following `W3C EBNF`__:\n\n__ https://www.w3.org/TR/REC-xml/#sec-notation\n\n.. code:: bnf\n\n SSV ::= Record (RS Record)*\n Record ::= Unit (US Unit)*\n Unit ::= UnitChar*\n\n UnitChar ::= Char - (RS | US)\n Char ::= /* see http://www.w3.org/TR/xml#NT-Char */\n RS ::= #x1E\n US ::= #x1F\n\nTable records (rows) are separated by the record separator ``RS``. Each record contains one or more units (fields), which are separated by the unit separator ``US``. A unit may contain zero or more characters, excluding RS and US. As a consequence, an empty file is a valid SSV file and represents a 1-by-1 table containing a single empty field.\n\nAPI Example\n-----------\n\n.. code:: python\n\n import ssv\n\n # simple table\n table = [['A1', 'B1', 'C1'],\n ['A2', 'B2', 'C2']]\n\n # encode table as SSV string\n ssv.dumps(table) # 'A1\\x1fB1\\x1fC1\\x1eA2\\x1fB2\\x1fC2'\n\n # write table to SSV file\n ssv.dumpf(table, 'data.ssv')\n # load table from SSV file\n new_table = ssv.loadf('data.ssv')\n assert table == new_table\n\n\nHistory\n=======\n\n0.1.1 (2016-05-29)\n------------------\n\n* Improve documentation.\n\n0.1.0 (2016-05-29)\n------------------\n\n* First release on PyPI.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/sfischer13/python-ssv", "keywords": "ASCII collision CSV delimiter separator SSV table text TSV value", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ssv", "package_url": "https://pypi.org/project/ssv/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ssv/", "project_urls": { "Homepage": "https://github.com/sfischer13/python-ssv" }, "release_url": "https://pypi.org/project/ssv/0.1.1/", "requires_dist": null, "requires_python": "", "summary": "SSV stands for separator separated values.", "version": "0.1.1" }, "last_serial": 2139445, "releases": { "0.0.1": [], "0.1.0": [ { "comment_text": "", "digests": { "md5": "2bdebef90d9b0c57b0bc77057ef5bcfb", "sha256": "c2d00febb2eb33ab4518af4c0b32ff1147123eb33066f55add8afcb250268a64" }, "downloads": -1, "filename": "ssv-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2bdebef90d9b0c57b0bc77057ef5bcfb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6844, "upload_time": "2016-05-29T13:23:01", "url": "https://files.pythonhosted.org/packages/56/b2/63435fc4461f8c213678529a247ad995873bedb878a200c27464862e9a83/ssv-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55914865dcabb9ef41199df6b75f049e", "sha256": "a6b3d6016ded3098c3cc23f9e748fca408a69bef0f81561d05adb8df7d27bda1" }, "downloads": -1, "filename": "ssv-0.1.0.tar.gz", "has_sig": false, "md5_digest": "55914865dcabb9ef41199df6b75f049e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5202, "upload_time": "2016-05-29T13:23:07", "url": "https://files.pythonhosted.org/packages/45/68/464c50cfbb909e9135d567ce210cf72fa55e587f88846ef5501caf59ff29/ssv-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "90e689bc9228d3e718479ab6d86d53c2", "sha256": "66062f95f42bfcc3378580c5171b1497335dc4179e7255b4ff8fa85acce44871" }, "downloads": -1, "filename": "ssv-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "90e689bc9228d3e718479ab6d86d53c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6844, "upload_time": "2016-05-29T13:40:51", "url": "https://files.pythonhosted.org/packages/3a/3b/a12b18448711355d6ef172d5c9cf28d19570d7fbf7272214b840f1bb36c9/ssv-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2208baab8069a843bf65aa96a684659e", "sha256": "8eed40bd37312516d619efd681603a1b29ee50d796c424ed7d6e64c1e8689454" }, "downloads": -1, "filename": "ssv-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2208baab8069a843bf65aa96a684659e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5220, "upload_time": "2016-05-29T13:40:56", "url": "https://files.pythonhosted.org/packages/b5/8c/0ff5ebc89e2d01c3fb0806e9aa27f18fd7ef71f36a7e5f8ab9dba3a40330/ssv-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "90e689bc9228d3e718479ab6d86d53c2", "sha256": "66062f95f42bfcc3378580c5171b1497335dc4179e7255b4ff8fa85acce44871" }, "downloads": -1, "filename": "ssv-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "90e689bc9228d3e718479ab6d86d53c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6844, "upload_time": "2016-05-29T13:40:51", "url": "https://files.pythonhosted.org/packages/3a/3b/a12b18448711355d6ef172d5c9cf28d19570d7fbf7272214b840f1bb36c9/ssv-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2208baab8069a843bf65aa96a684659e", "sha256": "8eed40bd37312516d619efd681603a1b29ee50d796c424ed7d6e64c1e8689454" }, "downloads": -1, "filename": "ssv-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2208baab8069a843bf65aa96a684659e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5220, "upload_time": "2016-05-29T13:40:56", "url": "https://files.pythonhosted.org/packages/b5/8c/0ff5ebc89e2d01c3fb0806e9aa27f18fd7ef71f36a7e5f8ab9dba3a40330/ssv-0.1.1.tar.gz" } ] }