perl生成图片

最近,在工作中,为了测试代码,我们的团队创建了一些测试,这些测试可以模拟数据,或者在某些情况下可以模拟正收益,这使我们能够更轻松地隔离正在处理的特定代码块。 我确信这在大多数测试驱动设计(TDD)场景中是相当普遍的做法。 但是,这让我想到了当我开始学习JavaScript时会使用的API,它将生成随机用户。 https://randomuser.me/

这是用于模拟用户数据的重要资源。 您可能会将其视为随机生成的用户的Lorem Ipsum。 当我在考虑这个整洁的工具以及我们的团队如何模拟其他类型的数据时,我开始考虑如何制作自己的用户数据生成器,类似于上面的API。

如果您想查看该项目的源代码,这是我到目前为止的内容:

https://github.com/ethanjarrell/randomUsers

以下示例将显示我如何考虑此过程,以及一些有关如何执行此过程的代码段。 首先,我需要了解我想为每个用户生成的事物的类型。 这是我想出的清单:

  • 名称
  • 年龄
  • 性别
  • 种族
  • 生日
  • 电子邮件
  • 电话号码
  • 地址
  • 占用
  • 兴趣爱好
  • 眼睛的颜色
  • 发色
  • 肤色
  • 高度
  • 重量
  • 体型
  • 婚姻状况
  • 配偶(如果已婚)
  • 小孩儿
  • 最高学历
  • 学校
  • 学生贷款债务
  • 年薪
  • 宗教

事后看来,我可能对这个清单有些不满。 但这是一个有趣的编程挑战。 我的想法是,您可以通过以下两种方式之一来执行此操作。 首先,您可以创建数千个概要文件,并且在运行代码时,只需随机返回数千个概要文件。

我认为第二种选择将耗时少得多,它是随机生成每个新人……以某种程度的随机性生成每个特征,而不依赖于任何包含完整随机概要文件的数据库。 例如,每次运行代码时,它将从列表或通过其他方式生成每个特征,并将其组合在一起以每次创建新的用户配置文件。

通过这样做,我意识到某些特质在某种程度上取决于其他特质。 而其他人则可以完全独立于其他任何人。 例如,您不能随机选择名称和性别。 否则,您最终可能会遇到一个叫伊莎贝拉的男人或一个叫巴基的女人。 并不是说这有什么问题,但是为了保持一致,我想在某种程度上保持社会规范。

其他细微的依赖特征可能是爱好,体重/体型等。 例如,如果我们随机选择这些特征,我们最终可能会成为一个爱好包括铁人三项但身体类型超重的人。 同样,这里没有错,但是重点是生成一致的数据。

另一个例子可能是教育/工作类型和年薪。 再有,我们可以随机选择,选拔一个拥有电气工程硕士学位的人,年薪为12,000美元。

为了以一种有意义的方式解决这个问题,我首先生成了不需要相互依赖的所有数据。 然后,根据最初的几个特征生成的内容,我可以从更孤立的数据子集中生成其余的特征。

为了开始我的Perl文件,我将使用一些本地Perl软件包:

#!/usr/bin/perluse DBI;use strict;use warnings;use lib qw(..);use JSON qw(  );use Data::Dumper;

在此示例中,我实际上没有使用DBI,但是如果您要将每个新生成的用户写入数据库,则DBI可能会派上用场。 我将使用lib和JSON。

首先,我上网查看了为特定条目随机生成的特征的列表。 这些都包含在上面的github链接中。 清理数据,删除空格并添加逗号后,我遍历列表,将每个条目推入数组。 然后,当我想从数组中进行随机选择时,可以使用Perl的“ rand”方法来获得随机条目。

我使用了很多列表来提取数据,但是我基本上使用相同的格式从列表中提取数据。 这是我如何创建男性和女性姓名列表的示例:

# declare a variable for the test txt filemy $maleNames = 'maleNames.txt';# connect to and open the json fileopen (FH, "< $maleNames") or die "Can't open $maleNames for read: $!";my @maleLines ;while (<FH>) {    push ( @maleLines , $_);}close FH or die "Cannot close $maleNames: $!";

my @maleList = ();foreach my $x ( @maleLines ) {  my $str = $x; @maleList = split(',', $str);}

# declare a variable for the test txt filemy $femaleNames = 'femaleNames.txt';# connect to and open the json fileopen (FH, "< $femaleNames") or die "Can't open $femaleNames for read: $!";my @femaleLines ;while (<FH>) {    push ( @femaleLines , $_);}close FH or die "Cannot close $femaleNames: $!";

my @femaleList = ();foreach my $x ( @femaleLines ) {  my $str = $x; @femaleList = split(',', $str);}

现在,我可以模拟抛硬币,如下所示:

my $gender = int(rand(2));

这将为性别生成一个0或1的数字。

然后我可以使用一个条件:

if ( $gender == 0 ) {$gender = "female";} else {$gender = "male";}

性别随机决定后,我们可以根据随机选择的性别结果从男性或女性名字列表中随机抽取新记录。

生成随机电话号码:

现在,一旦在Random中选择了状态,我就可以进行API调用来确定状态的区号,但是我现在还没有具体说明这一点。 我真正关心的是该号码采用电话号码格式((xxx)xxx-xxxx)。

为此,我只是随机生成了10位数字,并将它们连接为正确的格式:

my $n1 = int(rand(8)+1);my $n2 = int(rand(9));my $n3 = int(rand(9));my $n4 = int(rand(9));my $n5 = int(rand(9));my $n6 = int(rand(9));my $n7 = int(rand(9));my $n8 = int(rand(9));my $n9 = int(rand(9));my $n10 = int(rand(9));

my $phoneNumber = "($n1$n2$n3) $n4$n5$n6-$n7$n8$n9$n10";

生成随机邮政编码:

邮编也一样:

my $z1 = int(rand(8)+1);my $z2 = int(rand(9));my $z3 = int(rand(9));my $z4 = int(rand(9));my $z5 = int(rand(9));

my $zipcode = $z1 . $z2 . $z3 . $z4 . $z5;

生成随机电子邮件:

我认为电子邮件可能会有所不同。 例如,如果我已经生成了一个随机名称,则可以简单地执行以下操作:

firstName.lastName @ emailServer . com

虽然,这似乎并不令人信服,所以我想让电子邮件有几种。

my @emails = ("gmail", "hotmail", "protonmail", "yahoo", "aol");

my $index = rand @emails ;my $email = $emails[$index];

my $index2 = rand @adjectiveList ;my $adjective = $adjectiveList[$index2];

my $index3 = rand @animalsList ;my $myAnimal = $animalsList[$index3];

每次运行代码时,都会从5个列表中随机选择一个电子邮件服务。然后,从每个数百个列表中随机选择一个形容词和动物。 这将允许我创建以下格式的电子邮件:

fuzzy . kitten . 01 @ gmail .com

要么

firstName . the . terrible @ yahoo .com

使用这些变量,我创建了5种格式类型,并在1到5之间随机选择一个数字。根据结果,新电子邮件将获得该格式。 看起来是这样的:

my $emailAddress = "";my $girlGuy  ="";if ($gender eq "male"){  $girlGuy = "guy";}else {  $girlGuy = "girl";}my $emailFormat = int(rand(5));if ($emailFormat == 0){$emailAddress = $lastName[0] . "." . $lastName[1] . $sN3 . $z2 . "@" . $email . ".com";} elsif ($emailFormat == 1) {  $emailAddress = $adjective . "_" . $myAnimal . $sN1 . "@" . $email . ".com";} elsif ($emailFormat == 2) {  $emailAddress = $adjective . "_" . $lastName[0] . $sN1 . "@" . $email . ".com";} elsif ($emailFormat == 3) {  $emailAddress = $newState . "_" . $girlGuy . $sN1 . $sN2 . $sN3 . "@" . $email . ".com";} elsif ($emailFormat == 4) {  $emailAddress = $adjective . "_" . $newCity . "_" . $girlGuy . $sN1 . $sN2 . $sN3 . "@" . $email . ".com";}$emailAddress =~ s/\s+//g;

产生随机工作和学位:

对我来说,另一个有趣的事情是创造一份工作和一个学位。 我使用了一个随机职位的列表,并随机选择一个,类似于我创建并随机选择一个男性或女性名字的方式。 然后,使用新的随机作业,我在Perl中使用substr方法比较了该作业。 我基本上在做的是将职位的子字符串与大量潜在的学位课程进行比较。 例如,如果工作是:

Electrical Engineer

然后,我可能只拿到职位的前5个字母:

elect

并遍历该列表中的所有学位课程,看是否存在匹配条件。 如果有匹配项,我会将匹配项添加到该新的“随机用户”拥有的度数列表中。 我有学士,副学士和硕士学位课程的清单,所以我将它们全部选中,然后将匹配项推入一个度数组:

my $substring = substr $job, 0, 5;

my @degrees = ();foreach my $x ( @bachelorList ) {  if (index($x, $substring) != -1) {      push @degrees , $x;  }}

foreach my $x ( @associateList ) {  if (index($x, $substring) != -1) {      push @degrees , $x;  }}

foreach my $x ( @masterList ) {  if (index($x, $substring) != -1) {      push @degrees , $x;  }}

my $degree = "";

foreach my $x ( @degrees ) {  $degree = $degree . ", " . $x;}

最后,我只是将所有结果连接成一个字符串。

最终,我没有做完所有决定,最后得到的结果是哈希值,然后使用Dumper打印出来。 我的哈希看起来像这样,变量作为哈希值:

my $json = {NAME=>$name, WEIGHT=>$finalWeight, HEIGHT=>$finalHeight, EYE_COLOR=>$eyeColor, BODY_TYPE=>$bodyType, HAIR_COLOR=>$hairColor, SKIN_COLOR=>$skinColor, RELIGION=>$myReligion, SCHOOL=>$school, HIGHEST_LEVEL_OF_EDUCATION=>$highestLevelOfEducation, AGE=>$age, STUDENT_LOAN_DEBT=>'$' . $studentLoanDebt . '.00', ANNUAL_SALARY=>'$' . $annualSalary . '.00', CHILDREN=>$kids, BIRTHDAY=>$birthDate, GENDER=>$gender, MARITAL_STATUS=>$married, SPOUSE=>$spouse, ADDRESS=>$streetNumber . " " . $newStreet . ", " . $newCity . ", " . $newState . " " . $zipcode, PHONE=>$phoneNumber, EMAIL=>$emailAddress, OCCUPATION=>$job, HOBBIES=>$hobby1 . ", " . $hobby2 . ", " . $hobby3, DEGREE=>$degree, ETHNICITY=>$ethnicBackground};

print Dumper $json;

而且我的输出通常类似于以下内容:

{          'ADDRESS' => '7841 3rd Street West, Duarte, Minnesota 87604',          'GENDER' => 'female',          'SPOUSE' => 'Raleigh Teer',          'STUDENT_LOAN_DEBT' => '$6336.00',          'HAIR_COLOR' => 'Dark Brown',          'HEIGHT' => '6 feet, 10 inches',          'EMAIL' => ' creepy_Duarte_girl784@aol.com ',          'SKIN_COLOR' => 'Light Brown',          'RELIGION' => 'Stoicism',          'HOBBIES' => 'Golf, Tutoring Children, Photography',          'BIRTHDAY' => 'March 7, 1983',          'PHONE' => '(361) 734-5735',          'WEIGHT' => '327 lbs',          'AGE' => 35,          'MARITAL_STATUS' => 'married',          'DEGREE' => ', Bachelor of Accountancy, Master of Accountancy, Master of Accounting and Information Systems',          'ETHNICITY' => 'Chinese Australian',          'SCHOOL' => 'University of Minnesota-Duluth',          'NAME' => 'Maggie Davila',          'HIGHEST_LEVEL_OF_EDUCATION' => 'Masters Degree',          'BODY_TYPE' => 'Thick',          'EYE_COLOR' => 'Black',          'OCCUPATION' => 'Accountant',          'CHILDREN' => 5,          'ANNUAL_SALARY' => '$68077.00'        };

这是一个非常有趣的项目,即使它不是非常有用,我仍然在学习Perl方面学到了很多东西。 希望你喜欢。

翻译自: https://hackernoon.com/generating-mock-data-with-perl-7836a2ca0548

perl生成图片

perl生成图片_使用Perl生成模拟数据相关推荐

  1. mock模拟的数据能增删改查吗_使用Swager API Docs和easy-mock生成模拟数据

    前面文章已经搭建了本地的easy-mock 本地搭建Easy-Mock实现模拟数据 常见的Mock方式: 将模拟数据直接写在代码里 利用javascript拦截请求 利用Charles.Fiddler ...

  2. Mock.mock()生成模拟数据

    在做前端项目时,如果没有测试数据,可以通过mock来生成模拟数据. Mock.mock( rurl?, rtype?, template|function( options ) ) 根据数据模板生成模 ...

  3. 百度地图随机生成某个行政区域的随机坐标(用于生成模拟数据)

    百度地图随机生成某个行政区域的随机坐标 主要是为了生成模拟数据 示例 <!DOCTYPE html> <html lang="en"> <head&g ...

  4. Python —— Faker 生成模拟数据

    Faker 生成模拟数据 案例1 # 1.导包 from faker.providers.person import Provider from openpyxl import Workbook# 2 ...

  5. node.js 生成文件_如何使用Node.js在几秒钟内生成模拟数据

    node.js 生成文件 介绍 (Introduction) In most of the applications, you need to have some static JSON data w ...

  6. Excel自动化办公(一) | 满足你对Excel数据的所有幻想,python-office一键生成模拟数据

    自从在官网发布了python-office这个专门用来自动化办公的库,后台经常收到提问:晚枫,什么时候开发Excel功能呀? 今天Excel自动化办公的第一个功能上线了:自动生成带有模拟数据的Exce ...

  7. slice_input_producer在2.0版本里怎么用_用Gan生成一维数据(附代码)

    引言 之前在知乎上问过一个关于使用对抗生成网络(Generative Adversarial Network)生成一维数据的问题.最近老是有人问代码的问题,网上关于图片的很多,一维数据的也有,但是比较 ...

  8. python 正弦曲线_使用python生成正弦波数据

    在调试ESP32的音频功能的时候,需要对声音的效果做个测试,需要1khz的正弦波c语言数组形式的数据,采样率为16k.这么算也就是一个完整的正弦波波形用16个点来表示.如何快速获取这样的数据,又想起来 ...

  9. java 生成json数据_解析和生成JSON数据

    JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值.它对外部(External: 应用toString()方法输出的数值)调 ...

最新文章

  1. 测试逐飞的MM32F3277 MicroPython开发板的基本功能
  2. 获取服务(getService)
  3. 【C 语言】文件操作 ( 读取文件中的结构体数组 | feof 函数使用注意事项 )
  4. 填充因子-FILL FACTOR
  5. Python Base64模块的使用
  6. c++future 配合httplib post 高级技巧
  7. WebAPI——自动生成帮助文档
  8. linux mysql优化_Linux上跑MySQL优化技巧
  9. html不用ajax怎么提交,停止HTML中JS AJAX功能提交按钮
  10. linux中安装yum简单方法
  11. 苹果耳机无线真假测试软件,苹果耳机“真伪”终极鉴别来了,原来,区别如此大!...
  12. Himall商城普通帮助类(三)
  13. 【企业微信点餐系统】
  14. MySQL 实时同步 解决方案
  15. 如何在 CSS 中将表格居中?
  16. 数学之美 第三版 目录
  17. 2 简单使用原形工具Axure RP
  18. EBCDIC 与 GBK 的字符编码及其转换(转)
  19. p2197 nim游戏
  20. 美赛BOOM数学建模4-3马尔科夫预测

热门文章

  1. Web前端技术个人学习经验总结
  2. 我国第一部纯国产超级计算机,纯国产超级计算机获得世界冠军
  3. SqlServer存储过程中循环的使用
  4. Shiro的Java原生反序列化漏洞
  5. CentOS7 云服务器(ECS)挂载磁盘教程(简明完整梳理版)
  6. proteus 0.96OLED IIC仿真 SSD1306 UG-2864HSWEG01
  7. 《评人工智能如何走向新阶段》后记(再续17)
  8. DIY:制作一个语音识别的空调遥控器
  9. 分布式框架DSF的搭建
  10. Java后端架构师的成长之路(二)——Java设计模式(3)