【问题标题】:How to save hash values into a CSV如何将哈希值保存到 CSV
【发布时间】:2012-04-20 17:25:45
【问题描述】:

我有一个包含一列的 CSV,我喜欢在其中保存我的所有哈希值。我正在使用 nokogiri sax 解析 xml 文档,然后将其保存到 CSV。我得到这样的 xml 值:@infodata[:academic] = @content.inspect 哈希有以下键:

@infodata = {}
@infodata[:titles] = Array.new([])
@infodata[:identifier]  
@infodata[:typeOfLevel]
@infodata[:typeOfResponsibleBody]
@infodata[:type]
@infodata[:exact]
@infodata[:degree]
@infodata[:academic]
@infodata[:code]
@infodata[:text]

当我现在使用此代码循环键并将其保存到 CSV 时:

def end_document
 CSV.open("info.csv", "wb") do |row|
  for key, val in @infodata
    row << [val,]
  end
 end
 puts "Finished..."     
end

我得到的输出是:

"""avancerad"""
"""Ingen examen"""
"""uh"""
"""Arkivvetenskap""""Archival science"""
"""HIA80D"""
"""10.300"""
"""uoh"""
"""Arkivvetenskap rör villkoren för befintliga arkiv och modern arkivbildning med fokus på arkivarieyrkets arbetsuppgifter: bevara, tillgängliggöra och styra information. Under ett år behandlas bl a informations- och dokumenthantering, arkivredovisning, gallring, lagstiftning och arkivteori. I kursen ingår praktik, där man under handledning får arbeta med olika arkivarieuppgifter."""
"""statlig"""
"""60"""

我如何得到这样的输出:

"avancerad", "Ingen examen", "uh", "Arkivvetenskap", "Archival science", "HIA80D", 10.300,"uoh", "Arkivvetenskap rör villkoren för befintliga arkiv och modern arkivbildning med fokus på arkivarieyrkets arbetsuppgifter: bevara, tillgängliggöra och styra information. Under ett år behandlas bl a informations- och dokumenthantering, arkivredovisning, gallring, lagstiftning och arkivteori. I kursen ingår praktik, där man under handledning får arbeta med olika arkivarieuppgifter.", "statlig", 60

【问题讨论】:

  • 什么是“正确”;你想要的输出是什么?

标签: ruby csv nokogiri


【解决方案1】:

@joelparkerhenderson 谈到的 join 方法只是获取两个数组值并将它们连接在一起。

您可以使用flatten 来分离并创建一个新数组,如下所示:

# Open the CSV for writing
CSV.open("info.csv", "wb") do |csv|
  # Write the entire row all at once
  csv <<  @infodata.values.flatten
end 

阅读更多:http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-flatten

【讨论】:

    【解决方案2】:

    我想我理解你的一般问题,所以也许这可以帮助你:

    # Flatten the titles Array into one String
    @infodata[:titles] = @infodata[:titles].join(", ")
    
    # Open the CSV for writing
    CSV.open("info.csv", "wb") do |csv|
      # Write the entire row all at once
      csv <<  @infodata.values
    end
    

    【讨论】:

    • 您可能希望在打开文件后直接添加csv &lt;&lt; @infodata.keys 以保留标题。
    • 请@joelparkerhenderson 在此处检查整个代码:gist.github.com/2328752。我应该在构造函数中展平哈希吗?
    • @SHUMAcupcake,你不应该在分配之前inspect content。按照@joelparkerhenderson 的建议,简单地删除所有inspect 调用,并在打开csv 文件之前展平哈希。
    • @Jakobinsky 但是如何存储 xml 值?我必须使用检查..请检查我在 gisthub 上的代码。
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    相关资源
    最近更新 更多