终极CSV工匠。
feanor-csv的Python项目详细描述
费诺CSV
费诺是CSV文件的工匠。它可以为示例和测试生成复杂的csv文件或文件包。
注意:feanor目前正在开发中。在1.0.0
之前的所有版本都应视为alpha版本
命令行界面和库api在不同版本之间都可能发生显著变化。
发布版1.0.0
将为1.x
系列提供稳定的api和稳定的命令行接口。
用法
$ feanor --help
usage: feanor [-h] [--no-header] [-L LIBRARY] [-C GLOBAL_CONFIGURATION]
[-r RANDOM_MODULE] [-s RANDOM_SEED] [--version]
(-n N | -b N | --stream-mode STREAM_MODE)
{expr,cmdline} ...
optional arguments:
-h, --help show this help message and exit
--no-header Do not add header to the output.
-L LIBRARY, --library LIBRARY
The library to use.
-C GLOBAL_CONFIGURATION, --global-configuration GLOBAL_CONFIGURATION
The global configuration for arbitraries.
-r RANDOM_MODULE, --random-module RANDOM_MODULE
The random module to be used to generate random data.
-s RANDOM_SEED, --random-seed RANDOM_SEED
The random seed to use for this run.
--version show program's version number and exit
-n N, --num-rows N The number of rows of the produced CSV
-b N, --num-bytes N The approximate number of bytes of the produced CSV
--stream-mode STREAM_MODE
Schema definition:
{expr,cmdline} Commands to define a CSV schema.
检查版本:
$ feanor --version
feanor 0.5.0
任意类型
每个任意值都被分配了一个“任意类型”,它描述了如何生成值。 任意类型的语法如下:
# <ARBITRARY_NAME> [ CONFIG ]
其中ARBITRARY_NAME
必须与\w+
匹配,CONFIG
是python dict
文本。
例如,内置的int
任意类型可以按以下方式使用:
%int
或%int{}
:默认配置%int{"min": 10}
:不要生成小于10
(含)的数字。%int{"max": 10}
:不要生成大于10
(含)的数字。%int{"min": 10, "max":1000}
:生成10
和1000
之间的数字(两者都包括在内)。
feanor dsl表达式
价值是由一个简单的DSL定义的,它允许您以不同的方式组合多个套利,它们 允许为数据生成表示复杂的逻辑。
任意定义
任意定义只是其类型,并遵循前面解释的语法#<NAME>[CONFIG]
。
作业
可以使用语法(<expr>)=<NAME>
为特定表达式指定名称。
参考文献
通过使用语法@<NAME>
,可以引用为其指定名称的表达式的值。
串联
可以使用语法<expr_1> . <expr_2>
或<expr_1> · <expr_2>
连接多个值。
选择
您可以定义一个表达式,该表达式可以使用choice运算符|
随机获取一个值。
语法<expr_1> | <expr_2>
。
这个表达式的值取时间的expr_1
值和expr_2
值。
其他时间。您可以使用以下语法指定机会:expr_1 <0.3|0.7> expr_2
。
在这种情况下,表达式的计算结果将仅为时间的expr_1
和剩余的70%
。
是时候了。您可以省略这两个数字中的一个,因此expr_1 <0.3|> expr_2
相当于最后一个
表达式。
如果左右权重之和等于小于1
的值,则剩余部分
是值为空的机会。例如expr_1 <0.25|0.25> expr_2
定义
在时间的25%
中计算结果为expr_1
,时间的25%
计算结果为expr_2
的表达式。
时间的50%
计算为None
(即空)
合并
可以定义一个表达式,该表达式可以使用+
运算符合并两个不同表达式的值。
例如%int + %float
是一个计算结果为随机整数和随机浮点数之和的表达式。
示例
注意:以下示例都指定了选项-s 0
。这仅用于再现性原因。
feanor的常见用例不需要指定一个随机种子,事实上这样做常常会破坏工具的用途。
使用cmdline
子命令
生成10行随机整数:
$ feanor -s 0 -n 10 cmdline -c a '%int' -c b '%int'
a,b
885440,403958
794772,933488
441001,42450
271493,536110
509532,424604
962838,821872
870163,318046
499748,375441
611720,934973
952225,229053
生成大约1千字节的行,其中包含两个随机整数,并将结果写入/tmp/out.csv
:
$ feanor -s 0 -b 1024 cmdline -c a '%int' -c b '%int' /tmp/out.csv
$ head /tmp/out.csv
a,b
885440,403958
794772,933488
441001,42450
271493,536110
509532,424604
962838,821872
870163,318046
499748,375441
611720,934973
生成10行随机整数,第一列在0
和10
之间,第二列在0
和1000
之间:
$ feanor -s 0 -n 10 cmdline -c a '%int{"min":0, "max":10}' -c b '%int{"min": 0, "max":1000}'
a,b
6,776
6,41
4,988
8,497
6,940
4,991
7,366
9,913
3,516
2,288
生成10行随机整数及其和:
$ feanor -s 0 -n 10 cmdline -c a '%int' -c b '%int' -c c '@a+@b'
a,b,c
885440,403958,1289398
794772,933488,1728260
441001,42450,483451
271493,536110,807603
509532,424604,934136
962838,821872,1784710
870163,318046,1188209
499748,375441,875189
611720,934973,1546693
952225,229053,1181278
使用expr
子命令
生成10行随机整数:
$ feanor -s 0 -n 10 expr -c a,b '%int·%int'
a,b
885440,403958
794772,933488
441001,42450
271493,536110
509532,424604
962838,821872
870163,318046
499748,375441
611720,934973
952225,229053
生成包含2个随机整数的大约1千字节的行em并将结果写入/tmp/out.csv
:
$ feanor -s 0 -b 1024 expr -c a,b /tmp/out.csv '%int·%int'
$ head /tmp/out.csv
a,b
885440,403958
794772,933488
441001,42450
271493,536110
509532,424604
962838,821872
870163,318046
499748,375441
611720,934973
生成10行随机整数,第一列在0
和10
之间,第二列在0
和1000
之间:
$ feanor -s 0 -n 10 expr -c a,b '%int{"min":0, "max":10}·%int{"min": 0, "max":1000}'
a,b
6,776
6,41
4,988
8,497
6,940
4,991
7,366
9,913
3,516
2,288
生成10行随机整数及其和:
$ feanor -s 0 -n 10 expr -c a,b,c '(%int)=a·(%int)=b·(@a+@b)'
a,b,c
885440,403958,1289398
794772,933488,1728260
441001,42450,483451
271493,536110,807603
509532,424604,934136
962838,821872,1784710
870163,318046,1188209
499748,375441,875189
611720,934973,1546693
952225,229053,1181278
或者:
$ feanor -s 0 -n 10 expr -c a,b,c 'let a:=%int b:=%int in @a·@b·(@a+@b)'
a,b,c
885440,403958,1289398
794772,933488,1728260
441001,42450,483451
271493,536110,807603
509532,424604,934136
962838,821872,1784710
870163,318046,1188209
499748,375441,875189
611720,934973,1546693
952225,229053,1181278