我有一个CSV文件,其中包含网址,完全限定域名(FQDN),域名,IP地址和IP地址范围。我想以下列格式将其转换为YAML文件:
entity:
name: "company name"
network_names:
url:
- 'scheme://host:port/path?query'
- 'http://www.example.com/software/index.html'
fqdn:
- 'mymail.somecollege.edu'
domain:
- 'somecollege.edu'
network_addresses:
ipv4:
single_ip:
- 111.11.111.1
range:
- 111.11.111.0-111.11.11.255
问题是所有内容都混合在CSV文件中,例如在第一行有IP地址但在下一行有一个URL或FQDN。
所以我认为我需要检查一行是否包含IP地址,URL,FQDN或域,并从那里构建YAML文件。
但是如何指定YAML文件的字段?我是Ruby编程和YAML的新手。
答案 0 :(得分:1)
在这里,我们使用Faker红宝石来生成虚拟数据
//output
hey 2
hey 8
name,email,title,phone_number
Lawerence Kautzer,hedwig@lockman.name,Manufacturing Director,(548) 162-1670 x8532
Mrs. Walter Renner,man@pacocha.org,Legacy Legal Liaison,779-428-7453 x26055
---
- :name: Lawerence Kautzer
:email: hedwig@lockman.name
:title: Manufacturing Director
:phone_number: "(548) 162-1670 x8532"
- :name: Mrs. Walter Renner
:email: man@pacocha.org
:title: Legacy Legal Liaison
:phone_number: 779-428-7453 x26055
谢谢
答案 1 :(得分:0)
这是一个基本结构。 CSV.parse
可以返回一组行(可以看作是哈希)。数组和散列都可以轻松转换为YAML:
require 'yaml'
require 'csv'
csv = "ip,something,domain
x,y,z
a,b,c
m,n,o"
data = []
CSV.parse(csv, headers: true).each do |row|
hash = row.to_h
# hash looks like :
# {"ip"=>"x", " something"=>"y", " domain"=>"z"}
# Apply desired logic to it
data << hash
end
puts data.to_yaml
# ---
# - ip: x
# something: y
# domain: z
# - ip: a
# something: b
# domain: c
# - ip: m
# something: n
# domain: o