【问题标题】:Ruby/Rake: Why isn't the CSV file open for reading?Ruby/Rake:为什么不打开 CSV 文件以供阅读?
【发布时间】:2019-08-10 13:18:36
【问题描述】:

我想从 CSV 文件中删除前两行并添加我自己的标题。我已将其包装在 rake 任务中。

task :fix_csv do
  # copy to temp file
  cp ENV['source'], TMP_FILE

  # drop header rows
  table = CSV.table(TMP_FILE)
  File.open(TMP_FILE, 'w') do |f|
    f.write(table.drop(2).to_csv)
  end

  # add new header
  CSV.open(TMP_FILE, 'w', force_quotes: true) do |csv|
    csv << HEADERS if csv.count.eql? 0
  end

  puts 'Done!'
end

但是,这会失败并出现错误:

rake aborted!
IOError: not opened for reading
../rakefile.rb:54:in `count'

第 54 行是:

csv &lt;&lt; HEADERS if csv.count.eql? 0

为什么不能读取文件?删除前两行后,是否需要显式关闭文件?

【问题讨论】:

    标签: ruby file csv rake


    【解决方案1】:

    您第二次打开文件仅用于写入,但随后您尝试迭代获取对内容的访问(即通过查询行数):

    #                  ⇓⇓⇓
    CSV.open(TMP_FILE, 'w', force_quotes: true) do |csv|
    #                       ⇓⇓⇓⇓⇓
      csv << HEADERS if csv.count.eql? 0
    end
    

    虽然它很容易解决,但我想问一下完全忘记 CSV 会有什么问题,赞成有点像:

    old = File.readlines(FILE_NAME).drop(2)
    old[0...0] = HEADERS.join(',')
    File.write(FILE_NAME, old)
    

    ?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-17
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2011-03-10
      • 2013-10-03
      相关资源
      最近更新 更多