基于本地分区和排序键的概念管理应用程序中本地文件存储的简单库

ColumnFile的Python项目详细描述


column file:面向列的文件存储

column file是一个简单的面向列的文件存储解决方案,用于使用本地文件分析各种数据(csv、json…)。

此解决方案允许按密钥执行有效的crud操作。有关实现的详细信息,请参见:see implementation details。它生成一个文件组织,允许快速访问数据,如下所示:

How data is organized by column-file

安装

带pip:pip3 install ColumnFile

用法:

from ColumnFile import ColumnFile as db

文档

创建和打开操作

  • create(dbname, schema):创建存储架构并设置数据库架构。schema参数必须是python dict,包含两个属性:“hash”和“sort”。两者都是成对的列表(属性名,属性类型)。允许的类型在[“string”、“int”、“float”中。
  • {< CD4}}:打开现有数据库

读取操作

  • get(key, report_error = False):返回与作为参数传递的键关联的项。如果“report_error”参数设置为false,则在没有与键匹配的项时返回空的objetcs。如果为true,则函数在找不到任何内容时引发异常。
  • scan(sub_key, row_filter = lambda _: True):返回与子键匹配的所有值的迭代器。值按升序排序,并使用排序键进行尊重。哈希键没有特定的顺序。可以作为参数传递的row_filter函数允许您筛选迭代值。注意,即使提供了过滤器,也会扫描所有值。但是,只有那些充满过滤器的才会被返回。

写入操作

  • put(key, column_values):put操作可用于更新行,方法是将其所有列替换为column\u values参数中传递的列。如果没有行与给定的键匹配,则创建一个新行。
  • “合并”操作可用于通过合并现有列,并将列作为参数在列值中传递来更新行。如果没有行与给定的键匹配,则创建一个新行。
  • delete(key):删除一行
  • commit():将更改提交到数据库。注意,如果在写操作之后没有执行提交,数据库将不考虑它们。

示例代码

fromColumnFileimportColumnFilefromrandomimportrandintimportnumpyasnpdb=ColumnFile(verbose=True)# create the databasedb.create("demo-db",{"hash":[("year","integer")],"sort":[("month","integer"),("day","integer")]})# open the existing databasedb.open("demo-db")# let's add some dataforyearinrange(2012,2018):formonthinrange(1,13):fordayinrange(1,32):operation_type=['sell','buy'][randint(0,1)]amount=randint(1,500)db.put((year,month,day),{"operation_type":operation_type,"amount":amount})# change a specific column valuedb.merge((2016,6,23),{"operation_amount":250})# do NOT forget to commitdb.commit()# retrieve one specific row and print its operation typekey,values=db.get((2016,6,23))print(values['operation_amount'])# compute average sell amount in 2016results=db.scan(2016,row_filter=lambdarow:row[1]['operation_type']=='sell')sum_amount,n=sum(map(lambdarow:np.array([row[1]['amount'],1]),results))average=sum_amount/nprint('Average = ',average)

示例项目

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

推荐PyPI第三方库


热门话题
Spring、JPA和hibernate的java问题   如何将JMC(Java任务控制)连接到ubuntu中的远程JVM?   java如何将eventListener的结果存储为对象?   java在安卓中,点击一个按钮,我如何停止发送循环中发送的消息   java打开活动中的电子邮件   使用velocity模板打印JasperReports   java无法在自定义信息窗口上拨号   java如何在jsonb postgresql中查询并转换为谓词JPA   java更好地理解J2EE环境中的异常和日志记录   java打印多个文件   java无法使用API v2 Foreman 1.7.1创建主机   HTML单一提交类型按钮在java中不起作用   java调用静态方法的实例   ViewPage中替换片段的java问题   C++在java中创建数组(2D)而不初始化内部数组   java如何在NetBeans中同时更改变量名称的多个实例?   如何完成这个关于集合的java程序   java如何选择使用selenium从下拉菜单动态生成的元素?