gpt4 book ai didi

ruby-on-rails - 如何将从 CSV 文件解析的值写入 YAML 文件?

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:24 25 4
gpt4 key购买 nike

我想将从 CSV 文件解析的值写入 YAML 文件:

home_phone = row['HomePhone']
if home_phone.length == 10
puts "First Name: #{row['first_Name']} - Home Phone: #{home_phone} - Zip Code: #{zip_code}"
elsif home_phone.length == 11 && home_phone.start_with?('1')
home_phone.slice!(0)
puts "First Name: #{row['first_Name']} - Home Phone: #{home_phone} - Zip Code: #{zip_code}"
else
puts "First Name: #{row['first_Name']} - Home Phone: #{"0000000000"} - Zip Code: #{zip_code}"
end

以上代码用于按行打印详细信息。从代码中得到的输出是:

First Name: Douglas - Home Phone: 4252745000 -  Zip Code: 50309'

'First Name: Aya - Home Phone: 9995901339 - Zip Code: 90210'

'First Name: Audrey - Home Phone: 0 - Zip Code: 05667'

如何将这些值写入 YAML 文件?

最佳答案

如果您想将 CSV 文件转换为 YAML...

我创建了一个名为“test.csv”的文件,如下所示:

First Name,Home Phone,Zip CodeDouglas,4252745000,50309Aya,9995901339,90210Audrey,0,05667

Using this code:

require 'csv'
require 'yaml'

csv = CSV.read('test.csv')
File.write('test.yaml', csv.to_yaml)
pp YAML.load_file('test.yaml')

生成:

---- - First Name  - Home Phone  - Zip Code- - Douglas  - '4252745000'  - '50309'- - Aya  - '9995901339'  - '90210'- - Audrey  - '0'  - '05667'

我从 pp 得到这个输出,显示了 CSV 数据通过 YAML-land 的正确往返:

[["First Name", "Home Phone", "Zip Code"], ["Douglas", "4252745000", "50309"], ["Aya", "9995901339", "90210"], ["Audrey", "0", "05667"]]

这只是一个简单的解决方案,它将整个 CSV 文件加载到内存中。如果您处理的文件大于系统上的可用 RAM,那么这不是一个可扩展的解决方案。 CSV 支持 foreach 可以让你逐行读取文件,但 YAML 可能会发现很难逐行写入文件,因为它生成文件的方式;它需要一个完整的散列或数组,但您将向它传递子数组,这将导致 YAML 文件如下所示:

---- - First Name  - Home Phone  - Zip Code---- - Douglas  - '4252745000'  - '50309'---- - Aya  - '9995901339'  - '90210'---- - Audrey  - '0'  - '05667'

使用 YAML.load_file 加载它会导致:

[    [0] [        [0] "First Name",        [1] "Home Phone",        [2] "Zip Code"    ]]

换句话说,只会返回第一行。

解决方法是使用 YAML.load_documents(File.open('test.yaml', 'r')) 而不是 load_file,它会将各个部分重新组合成又是一个数组。

关于ruby-on-rails - 如何将从 CSV 文件解析的值写入 YAML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14496674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com