【问题标题】:Opening same file names in multiple directories using Ruby使用 Ruby 在多个目录中打开相同的文件名
【发布时间】:2019-01-16 04:05:28
【问题描述】:

希望使用 Ruby 执行以下操作:

  • 目录 A 和目录 B 将具有相同数量的 XML 文件和相同的文件名。

第 1 步: * 进入目录 A(目录 A 有 X 个 XML 文件) * 在目录 A 中,取第一个 XML 文件并保存文件名并打开文件

第 2 步: * 进入目录 B(目录 B 将具有与目录 A 相同文件名的相同数量的 XML 文件) * 在目录 B 中,打开在目录 A 中保存和打开的相同 XML 文件名。

第 3 步:(我已经完成了这部分)** * 比较两个文件(这部分我已经完成了)**

第 4 步: * 对两个目录中的所有 XML 文件重复此操作。


我尝试了一些方法,但由于某种原因,每个文件都发生了循环,而不是一次,Dir B 的第二个循环也没有执行:

id_dir = "#{Dir.pwd}"+"/id_responses"
ht_dir = "#{Dir.pwd}"+"/ht_responses"

Dir.foreach(id_dir) do |id_file|
  next if id_file == '.' or id_file == '..'
  id_file = File.open("#{id_dir}/#{id_file}", 'r')
  doc1 = Nokogiri::XML::Document.parse(File.open(id_file))

  Dir["#{Dir.pwd}"+"/ht_responses/#{id_file}"].each do |ht_file|
    next if id_file == '.' or id_file == '..'
    doc2 = Nokogiri::XML::Document.parse(File.open(ht_file))
  end
end

【问题讨论】:

  • 如何最好地实现上述场景?我尝试了一些事情,但由于某种原因,每个文件都发生了循环,而不是一次,Dir B 的第二个循环也没有执行:

标签: ruby xml file directory nokogiri


【解决方案1】:

不用循环其他目录,看看有没有同名文件就行了。

id_dir = "#{Dir.pwd}"+"/id_responses"
ht_dir = "#{Dir.pwd}"+"/ht_responses"

Dir.foreach(id_dir) do |id_file|
  next if id_file == '.' or id_file == '..'

  id_file_path = File.join(id_dir, id_file)
  ht_file_path = File.join(ht_dir, id_file)

  next unless File.exist?(ht_file_path)

  doc1 = Nokogiri::XML::Document.parse(File.open(id_file_path, 'r'))
  doc2 = Nokogiri::XML::Document.parse(File.open(ht_file_path, 'r'))
end

【讨论】:

  • 我想我不确定是否存在相同的文件,因此我想在第二个目录中搜索相同的文件名
  • 然后您可以使用File.exist?,这比遍历整个目录并检查其中的每个文件是否具有相同的名称要高效得多。我在答案中添加了支票。
  • 感谢 Kimmo 的帮助!
  • Kimmo,所以需要对脚本进行更改,我们必须检查 id_dir 和 ht_dir 中是否有任何子目录作为检查的一部分。我这样做了:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
相关资源
最近更新 更多