流式换行符分隔的JSON I/O。
NewlineJSON的Python项目详细描述
流式换行符分隔的JSON I/O。
示例
调用newlinejson.open()将返回一个类似于文件的对象,其行为类似于 Python的io.TextIOWrapper:
importnewlinejsonasnljwithnlj.open('sample-data/dictionaries.json')assrc, \ withnlj.open('out.json','w')asdst:forlineinsrc:dst.write(line)withopen('out.json')asf:print(f.read())){'field2':'l1f2','field3':'l1f3','field1':'l1f1'}{'field2':'l2f2','field3':'l2f3','field1':'l2f1'}{'field2':'l3f2','field3':'l3f3','field1':'l3f1'}{'field2':'l4f2','field3':'l4f3','field1':'l4f1'}{'field2':'l5f2','field3':'l5f3','field1':'l5f1'}
命令行界面
cli不是提供另一个实用程序,而是通过python -m newlinejson:
$ python -m newlinejson --help Usage: newlinejson [OPTIONS] COMMAND [ARGS]... NewlineJSON commandline interface. Common simple ETL commands for homogeneous data. Options: --version Show the version and exit. --help Show this message and exit. Commands: csv2nlj Convert a CSV to newline JSON dictionaries. insp Open a file and launch a Python interpreter. nlj2csv Convert newline JSON dictionaries to a CSV.
包含的实用程序用于处理同构数据,这意味着 行具有相同的字段。目标是提供简单的数据转换工具 而不是更全面的套房
我不能用一个函数完成这个模块的所有工作吗?
差不多-这是最简单的换行分隔json api:
importjsondefreader(stream):forlineinstream:yieldjson.loads(line)withopen('sample-data/lists.json')assrc,open('outfile.json','w')asdst:forlineinreader(src):dst.write(json.dumps(line))
但它不能处理失败,每次需要使用它都必须 重新编写,这意味着它需要打包,这意味着它需要单元测试, 可能会更像Python,现在我们回到这个模块。是的 更容易,也更像Python,只要import newlinejson就知道它会 工作而不是多次解决同一个问题
为什么这比msgpack、protobuf或任何其他压缩二进制格式都好?
可能不是。如果你正在寻找一个模块来整合到一个 容量数据管道或带宽有限的环境 压缩二进制格式。如果使用少量本地数据 制作一次性产品、校对工作流或希望提供其他 命令行应用程序读/写stdin/stdout的I/O功能, 这个模块很容易使用。
这个模块的目标是在一个简单易用的 使用直观的方式,而不是提供高度优化的I/O。 内置的json库不够快,但换行分隔的json是正确的 为了解决您的问题,许多更快的json库中的一个可以在全局范围内使用 newlinejson.core.JSON_LIB = module或将json_lib=module设置为关键字 open()、load()等中的参数。
安装
通过PIP:
$ pip install NewlineJSON
>;来自主机:
$ git clone https://github.com/geowurster/NewlineJSON.git $cd NewlineJSON $ python setup.py install
开发
安装:
$ pip install virtualenv $ git clone https://github.com/geowurster/NewlineJSON $cd NewlineJSON $ virtualenv venv $source venv/bin/activate $ pip install -e .[test]$ py.test tests --cov newlinejson --cov-report term-missing $ pep8 --max-line-length=95 newlinejson
许可证
见LICENSE.txt
更改日志
见CHANGES.md