基于本地分区和排序键的概念管理应用程序中本地文件存储的简单库
ColumnFile的Python项目详细描述
column file:面向列的文件存储
column file是一个简单的面向列的文件存储解决方案,用于使用本地文件分析各种数据(csv、json…)。
此解决方案允许按密钥执行有效的crud操作。有关实现的详细信息,请参见:see implementation details。它生成一个文件组织,允许快速访问数据,如下所示:
安装
带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)