tesdat是一个生成testdata的包。

tesdat的Python项目详细描述


要求

  • Python2.7或更高版本。

安装

$ pip install tesdat

用法

基本示例

In[1]:importtesdatIn[2]:model=tesdat.getmodel({...:'id':tesdat.IncrementPattern(),...:'x':tesdat.CyclePattern(['a','b','c']),...:# BLANK will be omit....:'option':tesdat.ChoicePattern([True,False,tesdat.BLANK]),...:})In[3]:container=tesdat.ListContainer(model,5,render=True)In[4]:containerOut[4]:[{'id':1,'x':'a'},{'id':2,'x':'b','option':False},{'id':3,'x':'c','option':True},{'id':4,'x':'a'},{'id':5,'x':'b'}]# specify rewrite=True, if file already exists.In[5]:tesdat.JsonFormatter(container).write('/tmp/test.json',rewrite=True)In[6]:!cat/tmp/test.json[{"x":"a","id":1},{"x":"b","id":2,"option":false},{"x":"c","id":3,"option":true},{"x":"a","id":4},{"x":"b","id":5}]

TSV示例

In[1]:importtesdatIn[2]:model=tesdat.getmodel([...:tesdat.IncrementPattern(start=10,step=5),...:tesdat.HashOfPattern(2,'md5'),# hashing value of the third column....:tesdat.ChoicePattern(['foo','bar','baz']),...:tesdat.CyclePattern(range(0,30,10)),...:]).ordering(2)# render at first index:2(third column)# IterContainer is saving memory, because generating an element each time.In[3]:container=tesdat.IterContainer(model,10)# repeat 10 times.In[4]:tesdat.CsvFormatter(...:container,...:delimiter='\t',...:header=['id','hash-of-name','name','value']...:).write('/tmp/test.csv',rewrite=True)In[5]:!cat/tmp/test.csvidhash-of-namenamevalue10acbd18db4cc2f85cedef654fccc4a4d8foo015acbd18db4cc2f85cedef654fccc4a4d8foo102073feffa4b7f6bb68e44cf984c85f6e88baz2025acbd18db4cc2f85cedef654fccc4a4d8foo030acbd18db4cc2f85cedef654fccc4a4d8foo103573feffa4b7f6bb68e44cf984c85f6e88baz204073feffa4b7f6bb68e44cf984c85f6e88baz04573feffa4b7f6bb68e44cf984c85f6e88baz105037b51d194a7513e45b56f6524f2d51f2bar205537b51d194a7513e45b56f6524f2d51f2bar0

自定义示例

如果对象是可调用的,则存储执行结果。

型号
In[1]:importtesdatIn[2]:defsquare(k,i):...:returnk*i...:In[3]:container=tesdat.DictContainer(square)In[4]:container(['a','b','c','d','e'])Out[4]:{'a':'','b':'b','c':'cc','d':'ddd','e':'eeee'}

模式

In[1]:importtesdatIn[2]:model=tesdat.getmodel({...:'col1':(lambdar,i:i),...:'col2':(lambdar:r['col1']+1),...:'col3':(lambdar:r['col2']*2),...:'col4':100,# fixed value...:}).ordering('col1','col2','col3')In[3]:container=tesdat.ListContainer(model)In[4]:container(4)Out[4]:[{'col1':0,'col2':1,'col3':2,'col4':100},{'col1':1,'col2':2,'col3':4,'col4':100},{'col1':2,'col2':3,'col3':6,'col4':100},{'col1':3,'col2':4,'col3':8,'col4':100}]

有限数量的元素示例

In[1]:importtesdatIn[2]:model=tesdat.getmodel({...:# x: a is 1times limited. / b is 2times limited. / c is 3times limited....:'x':tesdat.PickoutPattern({'a':1,'b':2,'c':3},missing=None),...:# y: a is 2times limited. / b and c is 1times limited....:'y':tesdat.PickoutPattern(['a','a','b','c'],missing='*'),...:# z: a and b can't be selected. / c is 5times limited....:'z':tesdat.PickoutPattern(['c']*5,missing=None),...:})In[3]:In[3]:container=tesdat.ListContainer(model)In[4]:container(6)Out[4]:[{'x':'a','y':'a','z':'c'},{'x':'c','y':'b','z':'c'},{'x':'c','y':'a','z':'c'},{'x':'b','y':'c','z':'c'},{'x':'c','y':'*','z':'c'},{'x':'b','y':'*','z':None}]

组合示例

生成组合多个元素的testdata 可以通过使用cyclepattern和sequencepattern的repeat参数来实现。

In[1]:importtesdatIn[2]:l0=['a','b']In[3]:l1=['a','b','c']In[4]:l2=['a','b','c','d']In[5]:model=tesdat.getmodel([...:tesdat.SequencePattern(l0,repeat=len(l1)*len(l2),missing=tesdat.ESCAPE),...:tesdat.CyclePattern(l1,repeat=len(l2)),...:tesdat.CyclePattern(l2),...:])In[6]:container=tesdat.Container(model)# by specifying the ESCAPE to missing-argument# automatically detect end of elements and escape before reaching 10000.In[7]:container(10000)Out[7]:[['a','a','a'],['a','a','b'],['a','a','c'],['a','a','d'],['a','b','a'],['a','b','b'],['a','b','c'],['a','b','d'],['a','c','a'],['a','c','b'],['a','c','c'],['a','c','d'],['b','a','a'],['b','a','b'],['b','a','c'],['b','a','d'],['b','b','a'],['b','b','b'],['b','b','c'],['b','b','d'],['b','c','a'],['b','c','b'],['b','c','c'],['b','c','d']]

嵌套示例

In[1]:importtesdatIn[2]:model=tesdat.getmodel({...:'a':tesdat.getmodel([...:tesdat.CyclePattern(['b','c']),...:tesdat.CyclePattern(['d','e']),...:]),...:tesdat.ChoicePattern(['f','g','h']):tesdat.DictContainer(lambdax:x*2,5)...:})In[3]:tesdat.Container(model,10,render=True)Out[3]:[{'a':['b','d'],'h':{0:0,1:2,2:4,3:6,4:8}},{'a':['c','e'],'f':{0:0,1:2,2:4,3:6,4:8}},{'a':['b','d'],'f':{0:0,1:2,2:4,3:6,4:8}},{'a':['c','e'],'g':{0:0,1:2,2:4,3:6,4:8}},{'a':['b','d'],'f':{0:0,1:2,2:4,3:6,4:8}},{'a':['c','e'],'h':{0:0,1:2,2:4,3:6,4:8}},{'a':['b','d'],'g':{0:0,1:2,2:4,3:6,4:8}},{'a':['c','e'],'h':{0:0,1:2,2:4,3:6,4:8}},{'a':['b','d'],'h':{0:0,1:2,2:4,3:6,4:8}},{'a':['c','e'],'h':{0:0,1:2,2:4,3:6,4:8}}]

日期时间实用程序

选择

在开始和结束之间随机选择。

In[1]:fromtesdat.utils.datetimeimportchoiceIn[2]:choice(1988,'2015-11-11T11:11:11.111111')Out[2]:datetime.datetime(2009,11,30,23,25,43,240031)# tuple: datetime(*tuple), dict: datetime(**dict)In[3]:choice((1988,5,22),{'year':2015,'month':11,'day':11})Out[3]:datetime.datetime(1996,7,1,11,14,59,314809)In[4]:fromdatetimeimportdatetime,dateIn[5]:choice(date(1988,5,22),datetime(2015,11,11,11,11,11))Out[5]:datetime.datetime(2011,3,23,19,39,14,476901)

发电机

以固定间隔生成DateTime对象的生成器。

In[1]:fromdatetimeimporttimedeltaIn[2]:fromtesdat.utils.datetimeimportgenerator# if you omit end-argument, then it creates an object infinitely.In[3]:g=generator(start=2015,interval=timedelta(days=1,hours=12))In[4]:next(g)Out[4]:datetime.datetime(2015,1,1,0,0)In[5]:next(g)Out[5]:datetime.datetime(2015,1,2,12,0)In[6]:next(g)Out[6]:datetime.datetime(2015,1,4,0,0)In[7]:next(g)Out[7]:datetime.datetime(2015,1,5,12,0)

范围

生成包含定期生成的DateTime对象元素的列表对象。

In[1]:fromdatetimeimporttimedeltaIn[2]:fromtesdat.utils.datetimeimportrangeIn[3]:range(2015,'2015/2/1')Out[3]:[datetime.datetime(2015,1,1,0,0),datetime.datetime(2015,1,2,0,0),datetime.datetime(2015,1,3,0,0),datetime.datetime(2015,1,4,0,0),datetime.datetime(2015,1,5,0,0),datetime.datetime(2015,1,6,0,0),datetime.datetime(2015,1,7,0,0),datetime.datetime(2015,1,8,0,0),datetime.datetime(2015,1,9,0,0),datetime.datetime(2015,1,10,0,0),datetime.datetime(2015,1,11,0,0),datetime.datetime(2015,1,12,0,0),datetime.datetime(2015,1,13,0,0),datetime.datetime(2015,1,14,0,0),datetime.datetime(2015,1,15,0,0),datetime.datetime(2015,1,16,0,0),datetime.datetime(2015,1,17,0,0),datetime.datetime(2015,1,18,0,0),datetime.datetime(2015,1,19,0,0),datetime.datetime(2015,1,20,0,0),datetime.datetime(2015,1,21,0,0),datetime.datetime(2015,1,22,0,0),datetime.datetime(2015,1,23,0,0),datetime.datetime(2015,1,24,0,0),datetime.datetime(2015,1,25,0,0),datetime.datetime(2015,1,26,0,0),datetime.datetime(2015,1,27,0,0),datetime.datetime(2015,1,28,0,0),datetime.datetime(2015,1,29,0,0),datetime.datetime(2015,1,30,0,0),datetime.datetime(2015,1,31,0,0),datetime.datetime(2015,2,1,0,0)]# +-3 hour noise, +5 minute noiseIn[4]:range(2015,'2015-01-15',hours=3,minutes=(0,5))Out[4]:[datetime.datetime(2015,1,1,3,1),datetime.datetime(2015,1,2,0,3),datetime.datetime(2015,1,3,2,0),datetime.datetime(2015,1,3,22,2),datetime.datetime(2015,1,4,22,3),datetime.datetime(2015,1,6,0,2),datetime.datetime(2015,1,7,0,4),datetime.datetime(2015,1,8,0,4),datetime.datetime(2015,1,8,21,3),datetime.datetime(2015,1,9,22,0),datetime.datetime(2015,1,11,0,0),datetime.datetime(2015,1,11,22,1),datetime.datetime(2015,1,12,22,5),datetime.datetime(2015,1,14,3,0),datetime.datetime(2015,1,15,2,5)]# it is able to specify minus direction as interval.In[5]:range(start='2015-5-22',end='2015-04-22',interval=timedelta(days=-1))Out[5]:[datetime.datetime(2015,5,22,0,0),datetime.datetime(2015,5,21,0,0),datetime.datetime(2015,5,20,0,0),datetime.datetime(2015,5,19,0,0),datetime.datetime(2015,5,18,0,0),datetime.datetime(2015,5,17,0,0),datetime.datetime(2015,5,16,0,0),datetime.datetime(2015,5,15,0,0),datetime.datetime(2015,5,14,0,0),datetime.datetime(2015,5,13,0,0),datetime.datetime(2015,5,12,0,0),datetime.datetime(2015,5,11,0,0),datetime.datetime(2015,5,10,0,0),datetime.datetime(2015,5,9,0,0),datetime.datetime(2015,5,8,0,0),datetime.datetime(2015,5,7,0,0),datetime.datetime(2015,5,6,0,0),datetime.datetime(2015,5,5,0,0),datetime.datetime(2015,5,4,0,0),datetime.datetime(2015,5,3,0,0),datetime.datetime(2015,5,2,0,0),datetime.datetime(2015,5,1,0,0),datetime.datetime(2015,4,30,0,0),datetime.datetime(2015,4,29,0,0),datetime.datetime(2015,4,28,0,0),datetime.datetime(2015,4,27,0,0),datetime.datetime(2015,4,26,0,0),datetime.datetime(2015,4,25,0,0),datetime.datetime(2015,4,24,0,0),datetime.datetime(2015,4,23,0,0),datetime.datetime(2015,4,22,0,0)]

常见

噪音

可以将实际时间之间的间隔指定为噪波参数。 允许指定噪声参数是“datetimes.generator”和“datetimes.range”函数。 噪声参数必须以kwargs格式指定。不需要。 可用密钥与timedelta args相同。具体来说,它如下。

  • 小时
  • 分钟
  • 微秒

argtype

下面是日期时间而不是日期时间类型的可接受参数。

int:it is processed as year.
str or unicode:create datetime object in the numeric part of string.
tuple:it is processed as (year, month, day)
dict:these items are processed as datetime arguments.
date:hour:minute:second is complemented with 00:00:00.

历史

2.1.0

  • 添加示例。
    • 日期时间实用程序。
    • 嵌套对象。
  • 反射器。
  • 替换了自定义模型参数。
  • 交换了自定义模型参数的顺序。
    • (索引,键)到(键,索引)

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

推荐PyPI第三方库


热门话题
NetBeans中的Java Swing滚动窗格   java如何与具有复合键的表建立关系?   Android中读取文件时java数据丢失   java黄瓜场景。embed在ubuntu机器上不工作?   java从spring mvc控制器操作中,我如何获得请求/响应的访问权限?   java减去两个长值   java选择下一个值firebase 安卓   用于起始和结尾连字符的java正则表达式   Java正则表达式解释   java Lifefay freemarker ADT:方法不可用?   java我怎样才能让我的开关盒作用于JFrame?   java在我的场景中使用连接池的理想方式是什么   java我如何接受jsoup的cookies?   java如何将整数数组更改为字符串数组?   java Android操作\u指针\u向上直到剩余触摸移动时才调用   java为什么gradle会出错?   io如何在java中复制/拆分输入流?   java使JButton不可见,但尊重其原始空间   java Spring提交表单获取复选框值不起作用