终极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}:生成101000之间的数字(两者都包括在内)。

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行随机整数,第一列在010之间,第二列在01000之间:

$ 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行随机整数,第一列在010之间,第二列在01000之间:

$ 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

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

推荐PyPI第三方库


热门话题
java基于Maven结果构建不同的Docker映像(与Jenkins一起)   java为什么在捕获异常时顺序很重要?   java如何创建或添加文本编辑器来使用swing输入数学方程?   构建/编译颤振应用程序时的java问题   java如何在调用方中返回数据之前等待JavaFX服务完成?   java如何将文件而不仅仅是文本发送到JMS队列?   c#将StringBuilder#AppendFormat转换为java   web应用程序中的java授权   java找不到元素:通过POM执行代码时出错,通过单个main()程序执行时,同一定位器工作正常   从Java运行带有自定义模块导入的Python脚本   多线程Java堆内存使用率波动   使用Java在MongoDB中进行动态聚合   unicode UTF8到Java中的EBCDIC   java项目不会在Android Studio中运行