使用python 3实现键入tsv的简单格式

typedtsv的Python项目详细描述


类型DTSV

typed tsv:使用python 3实现输入tsv的简单格式。

在pypi上可用:https://pypi.org/project/typedtsv/

安装时使用:pip install typedtsv

请参阅代码并在此处留下反馈:https://github.com/jimmybot/typedtsv

为什么?

json、yaml、toml和其他简单的格式不是为类似列表/表的数据集构建的。

yaml的速度特别慢,因为它具有扩展的特性集,而json(对于单个对象而不是集合)是不可分块的。我曾经把所有的pypi包信息都存储在一个yaml文件中,读出来需要半天时间。使用死板的简单换行分隔的json格式,使得解析只需几秒钟。

换行分隔的json很方便,在解析时出错的可能性很小,性能也很好。缺点是支持的类型有点太有限(没有int vs float),而且也不容易被人阅读或编辑。

toml特别针对配置文件,并且类似地解析单个dictionary对象而不是集合的结果。

csv/tsv格式有太多的模糊性,导致在文件本身之外包含重复的自定义解析逻辑。csv引号转义也会导致解析性能差。

目标

  • 简单点
  • 快一点
  • 易于并行化
  • 是csv/tsv/json和简单使用yaml的更好选择
  • 支持开放数据和数据共享/存档。将有关数据集的信息推送到数据文件中,以便将来重现

考虑用例

  • 开放数据的数据库不可知、程序不可知的简单文件格式
  • 共享可重复数据科学数据集的快速串行化格式
  • 易于创建、易于编辑、易于理解的测试数据库设备

非目标

  • 无限扩展性a la yaml
  • 配置文件。重点是对象列表/表格数据

格式

格式是一个普通的tsv,除了标题行使用冒号格式来注释类型:

<col_name>:<col_type>\t<col_name2>:<coL_type2>...

例如:

# I'm a comment and will be ignored
url:str    n_times:int   score:float
https://www.example.com 5   1.6
https://archive.org 99  9.9

最初的传递集中在python的基本类型和json上。当前有效类型为:

TypeNotes
int
float
boolValid values: true, false, t, f, yes, no, y, n, 1, 0
strNewlines, tabs, \, and # must be escaped
datetime'2011-01-01 00:00:00' Without timezone assumes UTC
json
nullAll types are nullable with value 'null'. To get literal string 'null', use '\null'

支持注释,仅以作为前缀。在带有一个反斜杠“\”的字符串中实际转义。

行分隔符仅使用'\n'。窗口换行符,'\r\n'无效。

我们永远不允许使用引号'\n',因为这将使文件难以分块,从而使并行读取变得困难。

gotchas

  • 在python中,您需要小心打开可能包含windows新行的文件:
infile=open('data.ttsv','r',newline='\n')# must set newline='\n' because default for newline is '\n' or '\r' or '\r\n'
  • typedtsv.dumps可以从数据的第一行推断列类型,但如果有任何null的,则不能推断列类型。在这种情况下,请使用常规的orderedict方法定义列名和类型

待办事项:

  • 添加布尔类型
  • 添加空值
  • 添加日期时间/日期/时间类型:需要避免歧义,同时支持常见用法
  • 人体工程学:可以选择读取和转储单个数据列表,而不是处理列表列表
  • 使用与f:https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure
  • 可能:扩展格式以支持列注释/其他公共元数据
  • 可能:支持数组和映射类型以与Postgres兼容
  • 可能:支持日期、时间和/或时间间隔类型

开发

确保已安装诗歌:https://github.com/sdispater/poetry

git clone git@github.com:jimmybot/typedtsv.git
cd typedtsv
poetry install
poetry shell
pytest

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置